Форум: "Corba";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];
ВнизПечать многих документов в Word Найти похожие ветки
← →
AndDem (2005-11-30 16:59) [0]Всем доброго дня!
Возникла задача распечатать несколько однотипных документов Word по заданному шаблону, различие которых состоит в некоторых данных (напр, имя и адрес человека). В шаблоне проставлены закладки.
В цикле по нескольким записям (выборка из БД) кидаю в закладки данные и пытаюсь печатать. Проблема в том, что на печать выходит только первый лист, а остальные зависают в очереди принтера и не печатаются...
Сначала делал по принципу
открыть экземпляр Word
цикл
открыть файл шаблона
подставить значения
распечатать
закрыть активный документ
конец цикла
закрыть экземпляр Word
Потом от отчаяния решил включить в цикл запуск и завершение работы экземпляра Word
цикл
открыть экземпляр Word
открыть файл шаблона
подставить значения
распечатать
закрыть активный документ
закрыть экземпляр Word
конец цикла
Но ничего не помогло... Есть мысль воспользоваться механизмом процессов (чтобы отследить окончание печати), но, если честно, мне кажется это нелогичным...
Может, кто поделится свежей идейкой? Вот код:
for i := 1 to SelectedRows.Count do
begin
try
MSWord := GetActiveOleObject("Word.Application")
except
MSWord := CreateOleObject("Word.Application")
end;
DataSource.DataSet.GotoBookmark(pointer(SelectedRows.Items[i-1]));
Document := MSWord.Documents.Open(FileName := template, ReadOnly:=False);
Document.Bookmarks.Item("cus_name").Range.InsertAfter(Fields[0].AsString);
Document.Bookmarks.Item("cus_addr").Range.InsertAfter(Fields[1].AsString);
Document.PrintOut;//(NumCopies:="1");
Document.Close(SaveChanges := FALSE);
MSWord.Application.Quit;
VarClear(MSWord)
end;
Заранее спасибо!
← →
AndDem (2005-11-30 18:35) [1]Уточнение...
Я неверно выразился... Я сказал "Проблема в том, что на печать выходит только первый лист, а остальные зависают в очереди принтера и не печатаются", а правильно "Проблема в том, что на печать выходит документ только по первой итерации (по первой записи из выборки), а остальные зависают в очереди принтера и не печатаются..."
← →
umbra © (2005-11-30 19:57) [2]не стоит на каждой итерации создавать и уничтожать вордовское приложение.
Лучше сделать так:try
MSWord := GetActiveOleObject("Word.Application")
except
MSWord := CreateOleObject("Word.Application")
end;
for i := 1 to SelectedRows.Count do
begin
DataSource.DataSet.GotoBookmark(pointer(SelectedRows.Items[i-1]));
Document := MSWord.Documents.Open(FileName := template, ReadOnly:=False);
Document.Bookmarks.Item("cus_name").Range.InsertAfter(Fields[0].AsString);
Document.Bookmarks.Item("cus_addr").Range.InsertAfter(Fields[1].AsString);
Document.PrintOut;//(NumCopies:="1");
Document.Close(SaveChanges := FALSE);
end;
MSWord.Application.Quit;
VarClear(MSWord);
← →
YurikGL © (2005-11-30 21:12) [3]
> Возникла задача распечатать несколько однотипных документов
> Word по заданному шаблону, различие которых состоит в некоторых
> данных (напр, имя и адрес человека). В шаблоне проставлены
> закладки.
> В цикле по нескольким записям (выборка из БД) кидаю в закладки
> данные и пытаюсь печатать. Проблема в том, что на печать
> выходит только первый лист, а остальные зависают в очереди
> принтера и не печатаются...
Совет:
Открываем ворд с шаблоном... берем текст шаблона в буфер (хотя это не есть хорошо, но другого выхода не вижу). Заполняем шаблон. Идем в конец, ставим разрыв страницы, за разрывом вставляем текст шаблона из буфера. Заполняем его. И т.д.
Можно шаблон держать в одном документе и много раз вставлять его в другой.
← →
AndDem (2005-12-01 13:09) [4]2 umbra
Согласен. Именно так я и делал (случай я описал самым первым в своем вопросе)....
2 YurikGL
У меня создалось впечатление, что при стандартном копировании через буфер обмена закладки не копируются...
2 All
Может, надо не Document.PrintOut использовать, а что-то другое? Подскажите!
← →
YurikGL © (2005-12-01 17:32) [5]
> У меня создалось впечатление, что при стандартном копировании
> через буфер обмена закладки не копируются...
тогда можно:
Создали пустой документ1
Скопировали файл шаблона
Открыли копию шаблона
Заполнили
Скопировали через буфер в документ1+разрыв страницы
Закрыли копию шаблона(без сохранения)->открыли копию шаблона. В крайнем случае - перезаписали копию шаблона...
← →
Virgo_Style © (2005-12-02 03:37) [6]Если не решишь, напиши мне, у меня валяется старый проект на эту тему... правда, я там как-то не очень оптимально с вордом работал, но все равно получалось быстрее, чем принтер печатал -)
← →
AndDem (2005-12-02 13:14) [7]Решил методом, предложенным YurikGL... Спасибо за ответы всем отозвавшимся!
Страницы: 1 вся ветка
Форум: "Corba";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c