|
|
|
Печать в MSWord ровными колонками
|
|||
|---|---|---|---|
|
#18+
Из DW получаем данные и вставляем в Word строки в виде таблицы: НАЗВАНИЕ КОЛ-ВО ЦЕНА СУММА Стол 1 12.50 12.50 Барабан 3 15.00 45.00 Длинный текс... 5 0.50 100.00 ххх 135 237.00 31995.00 Вопрос: как получить такие строки в красивом виде? Проблема в длине названия. Как узнать длину слова в см, а не в количестве букв (т.к. ширина букв разная)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2006, 14:52 |
|
||
|
Печать в MSWord ровными колонками
|
|||
|---|---|---|---|
|
#18+
Riska wrote: > Из DW получаем данные и вставляем в Word строки в виде таблицы: > *НАЗВАНИЕ КОЛ-ВО ЦЕНА СУММА Ну так и загони их в таблицу и не мучь себя и животное :). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2006, 15:10 |
|
||
|
Печать в MSWord ровными колонками
|
|||
|---|---|---|---|
|
#18+
А можно примерчик? Имеются переменные, из которых составляется строка. Как распечатать таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2006, 17:19 |
|
||
|
Печать в MSWord ровными колонками
|
|||
|---|---|---|---|
|
#18+
У нас реализовано в виде шаблонов. Т.е. рядо с exe`шником есть папка с используемыми шаблонами. в твоем случае нужно будет нарисовать эту таблицу, рсакрасить понаписать всяко разного. а в программе используется написанный для этого nvo объект по сути использующий виндовое OLE, просто использование объекта удобно в плане обвязки сложных OLE вызовов и синтакиса - это обеспечиваемость читаемость кода, сделали только самое нужное и часто пользуемое, работает неплохо. Самое иинтересное, что шаблон можно в принципе не использоватьт и создавать все с помощью этого же объекта сервиса. Но шаблон удобнее, посокльу вечно меняются подписи в документах и шапки, в итоге пользователи (не все, а только допущенные) правят шаблон и все. Ниже надергал примеры как это выглядит в коде: //шаблон Word`a lnv_word.of_SetTemplate('RS_InventoryNote') //создавать все последующие таблицы с бордюром lnv_word.of_TableBorder(TRUE) //подключение к OLE серверу lnv_word.of_connect() //отобразим приложение //lnv_word.of_visible(TRUE) //заполнение некоторых шаблонных полей li_rep_id = of_GetReportNum() //получим параметр - номер отчетности lnv_word.of_setfield('inventory_nb',string(li_rep_id)) *************** //создадим таблицу и выведем ее порядковый номер таблицы li_tbl_nb ++ lnv_word.of_writeln(string( li_tbl_nb )) lnv_word.of_LeftIndent(0) lnv_word.of_SetFontSize(12) li_tbl_cnt = lnv_word.of_TableAdd(2,4) //заполним шапку таблицы lnv_word.of_tablesetcell(li_tbl_cnt,0,1, 'Инструмент', 1 ) lnv_word.of_tablesetcell(li_tbl_cnt,0,2, 'Код', 1 ) lnv_word.of_tablesetcell(li_tbl_cnt,0,3, 'Излишек', 1 ) lnv_word.of_tablesetcell(li_tbl_cnt,0,4, 'Недостача', 1) //заполним данные таблицы lnv_word.of_tablesetcell(li_tbl_cnt,2,1, dw_rep.object.r_instr_nm , 1 ) lnv_word.of_tablesetcell(li_tbl_cnt,2,2, dw_rep.object.r_instr_rus_code, 1 ) lnv_word.of_tablesetcell(li_tbl_cnt,2,3, & string(dw_rep.object.r_surplus_q, uf_FieldFormat(dw_rep.object.r_surplus_q)),2) lnv_word.of_tablesetcell(li_tbl_cnt,2,4, & string(dw_rep.object.r_shortage_q, uf_FieldFormat(dw_rep.object.r_shortage_q)),2) *************** //отобразим приложение lnv_word.of_visible(TRUE) //отключимся от OLE сервера lnv_word.of_disconnect() ************************************************************* Вобщем у нас есть объект работы с word`ом, который мы постояно совершенствуем. Есть такой же для работы с excel, скажу по секрету что работает он быстрее чем библиотека dw2xls с использованием того же OLE, хотя умеет очень немного и не так, но наши нужды удовлетворяет, а главное адекватен по производительности, хотя не так красиво выводит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 10:50 |
|
||
|
Печать в MSWord ровными колонками
|
|||
|---|---|---|---|
|
#18+
вот пример функции объекта, пользуй :-) /* Добавляет в документ таблицу и отрисовывает ей рамку если есть такая установка */ int li_tbl_nb, ii_line_style li_tbl_nb = ioo_oleobject.Tables.Count li_tbl_nb ++ ioo_oleobject.Tables.Add(ioo_oleobject.Paragraphs.Last.Range, ai_rows, ai_cols) //создать таблицу с отступом вправо ioo_oleobject.Tables.Item(li_tbl_nb).Rows.SetLeftIndent( ii_left_indent, 1 ) if ib_table_border then ii_line_style = 1 else ii_line_style = 0 end if ioo_oleobject.Tables.Item(li_tbl_nb).Borders.OutsideLineStyle = ii_line_style ioo_oleobject.Tables.Item(li_tbl_nb).Borders.InsideLineStyle = ii_line_style return li_tbl_nb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 11:13 |
|
||
|
Печать в MSWord ровными колонками
|
|||
|---|---|---|---|
|
#18+
Спасибо. Только вот беда, что без самого nvo этот код не помогает :( Можно как-нибудь обзавестись самим nvo (mkrul2000@yahoo.com)? Появилась другая идея. В связи с тем, что уже все написано, самым простым решением было бы не печатать всю строку сразу, а разделить ее на отдельные кусочки. В этом случае надо только добавить в вордовский документ еще несколько меток (т.е. конкретно указать, где начинается очередное поле). А после печати всей строки передвигать сами метки на строку ниже. Вопрос только в том, можно ли двигать из скрипта сами метки? Если да, то как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 13:59 |
|
||
|
Печать в MSWord ровными колонками
|
|||
|---|---|---|---|
|
#18+
Честно говоря с layout`ом я сам не сильно заморачивался и точная ширина колонок меня мало интересовала, как раз наоборот - было важно чтобы они сами расширялись согласно введенному тексту. Объект выслал :-) Если в ответ мне допишите функции работы с layout`ом я буду рад, поскольку последнее время вкусы у пользователей возрасли, особенно в плане красивости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 14:09 |
|
||
|
|

start [/forum/topic.php?fid=15&fpage=70&tid=1337729]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
29ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 293ms |

| 0 / 0 |
