02.06.2006, 15:09 | #1 |
Moderator
|
ComWordDocument_RU
Добрый День!
Хочу сформировать отчет на базе вордовского шаблона. Структура отчета следующая - есть акт содержащий заголовок и строки, и мне надо этот акт на каждой итерации выводить в один текущий документ word, т.е. получится в одном вордовском файле будет много актов. Акт содержит заголовок м строки. Как реализовать один акт я знаю -- воспользовавшись методами insertValue в загловочной части и tableInsertValue в строках. А вот как реализовать вывод нескольких актов? upd: Оговорку поправил, Спасибо! Последний раз редактировалось DreamCreator; 02.06.2006 в 15:22. |
|
02.06.2006, 15:59 | #2 |
Участник
|
Копированием.
Я так понимаю, что один акт - это одна таблица. Создай в шаблоне документа Word сразу 2 одинаковых таблицы. Заполнение начинай со второй. Надо новый акт, создаешь новую таблицу, как копию первой в конце листа. По окончании формирования документа удаляешь уже не нужную первую таблицу. Какие для этого нужны команды посмотри через запись макроса. |
|
02.06.2006, 16:43 | #3 |
Участник
|
Другой вариант: открывать два шаблона сразу (или шаблон и пустой документ) - данные вносим в один из них и копируем в другой. Чтобы не заморачиваться с очисткой просто переоткрываем шаблон
__________________
Axapta v.3.0 sp5 kr2 |
|
02.06.2006, 16:50 | #4 |
Moderator
|
Подскажите пожалуйста как скопировать?
|
|
02.06.2006, 18:08 | #5 |
Участник
|
Цитата:
Сообщение от DreamCreator
Подскажите пожалуйста как скопировать?
Код: //select all document ([Ctrl] + [A]) void selectAll() { COM аctiveWindow; COM selection; try { selection = m_comApplication.selection(); selection.WholeStory(); } catch(exception::Error) { checkFailed(strFmt("@SYS19306", funcName())); } if (selection) selection.finalize(); } Код: //copy select range ([Ctrl] + [C]) void copy() { COM аctiveWindow; COM selection; try { selection = m_comApplication.selection(); selection.Copy(); } catch(exception::Error) { checkFailed(strFmt("@SYS19306", funcName())); } if (selection) selection.finalize(); } Теперь для нужного COM обекта Word делаю вставку: Код: //paste copy buffer ([Ctrl] + [V]) void paste() { COM аctiveWindow; COM selection; try { selection = m_comApplication.selection(); selection.Paste(); } catch(exception::Error) { checkFailed(strFmt("@SYS19306", funcName())); } if (selection) selection.finalize(); } |
|
|
За это сообщение автора поблагодарили: DreamCreator (1). |
05.06.2006, 09:30 | #6 |
Moderator
|
Спасибо!
|
|
06.06.2006, 16:11 | #7 |
Пенсионер
|
Цитата:
Сообщение от DreamCreator
Спасибо!
Файл шаблона, содержит ОДИН документ. Сначала создается новый файл на основе этого шаблона, заполняется, а когда надо создать еще один документ в этом же файле просто делается вставка в него....того же файла шаблона .... и аккуратно появляется еще один, например Акт
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
14.11.2008, 13:39 | #8 |
Участник
|
Братцы, может кто знает как програмно перейти на следующую строку (перевод каретки) в документе Word?
Стоит задача вывести в цикле несколько однотипных строк..
__________________
"Угадайте подряд три раза, и заработаете репутацию эксперта" (с) Законы Мерфи. Рекомендация Питерса |
|
14.11.2008, 13:43 | #9 |
MCTS
|
Selection.TypeParagraph, получив перед этим Selection, разумеется.
И вообще, есть такая классная штука, как запись макроса, и в ворд, и в ексель. Пускаете запись, что-то делаете, что не знаете как спрограммировать, и получаете макрос, с требуемым вам кодом. Последний раз редактировалось Eldar9x; 14.11.2008 в 13:49. |
|
|
За это сообщение автора поблагодарили: fur-lined (1). |
14.11.2008, 14:40 | #10 |
Участник
|
Как получить то?
X++: ?ctiveWindow = m_comDocument.activeWindow(); selection = ?ctiveWindow.selection(); selection.TypeParagraph();
__________________
"Угадайте подряд три раза, и заработаете репутацию эксперта" (с) Законы Мерфи. Рекомендация Питерса |
|
14.11.2008, 16:22 | #11 |
Участник
|
X++: selection = m_comApplication.selection(); selection.TypeParagraph(); Неужели никто не знает как определить местонахождение курсора?
__________________
"Угадайте подряд три раза, и заработаете репутацию эксперта" (с) Законы Мерфи. Рекомендация Питерса |
|
14.11.2008, 17:37 | #12 |
Гость
|
Цитата:
X++: static void WordTest(Args _args) { ComWordDocument_RU doc; Com d, w, s; ; doc = new ComWordDocument_RU(); doc.newFile('',true); d = doc.getComDocument(); w = d.activewindow(); s = w.selection(); s.typetext('11111'); s.typeparagraph(); s.typetext('22222'); } |
|
|
За это сообщение автора поблагодарили: fur-lined (1). |
14.11.2008, 17:43 | #13 |
MCTS
|
вот так, например, или класс ComOfficeDocument_RU, дописать, чтобы m_comApplication получить:
X++: static void Job4(Args _args) { ComWordDocument_RU comApi; Com doc; Com app; Com sel; ; comApi = new ComWordDocument_RU(); comApi.newFile(); doc = comApi.getComDocument(); // получим m_comApplication app = doc.Application(); comApi.visible(true); sel = app.selection(); sel.typeText("dfdfd"); sel.TypeParagraph(); sel.TypeParagraph(); sel.typeText("fgfggf"); } |
|
|
За это сообщение автора поблагодарили: fur-lined (1). |
14.11.2008, 18:40 | #14 |
Участник
|
NewLine('\n')
Цитата:
X++: static void ComWordNewLine(Args _args) { ComWordDocument_RU comWord ; #define.NewLine('\n') ; comWord = new ComWordDocument_RU() ; comWord.newFile( '', false ) ; comWord.selectionInsertValue( '1111' + #NewLine ) ; comWord.selectionInsertValue( '2222' + #NewLine + #NewLine) ; comWord.selectionInsertValue( '3333' ) ; comWord.visible( true ) ; } |
|
|
За это сообщение автора поблагодарили: fur-lined (1). |