![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Добрый день.
В цикле формируются docx файлы (распаковка как zip архив, парсинг XMLб подмена значений, запаковка обратно в архив), которые необходимо печатать в порядке их формирования. Файлов много ~ 2000 за 1 прогон. Сейчас они у меня просто складываются в папку, а потом от туда методично... ПКМ - печать. Сами понимаете... Как это дело автоматизировать? Я догадываюсь, что нужно использовать что-то вроде Код:
shellexecute('print', fullfilename, ...)Для начала можно просто ждать пока закроется только что запущенный процесс. Но как получать Handle после ShellExecute экземпляра Word я не разобрался. Прошу помощи в этом вопросе. |
|
#2
|
||||
|
||||
|
Тут, наверное, нужно уже использовать сервер автоматизации Word с вкладки Servers.
|
|
#3
|
||||
|
||||
|
Цитата:
Смотри стандартные компоненты TWordApplication, TWordDocument на вкладке Servers. Примеры, например, здесь: Delphi и OLE Automation с Word MS Word вместо QReport Цитата:
|
|
#4
|
||||
|
||||
|
Цитата:
Цитата:
Последний раз редактировалось Kailon, 27.12.2014 в 03:30. |
|
#5
|
||||
|
||||
|
Копать яму можно отверткой, мастерком или лопатой. Результат будет тот же, но потраченное время и силы - разные.
В Вашем случае будут использованы все инструменты поочередно. Для начала воспользуйтесь функцией CreateProcess. Затем, получив хендл и контроль над выполнением программы, нужно задействовать OLE, чтобы контролировать и обрабатывать ошибки, возникающие при отправки документа на печать. И обязательно связаться с драйвером принтера для контроля и защиты от переполнения очереди печати. Конечно, все ошибки, которые могут возникнуть в процессе, сразу не предусмотреть, но в Вашем случае, когда все это происходит в цикле, просто необходимо избавить себя от простейших ошибочных ситуаций. |
|
#6
|
||||
|
||||
|
А понаписали-то... Собственно весь код будет примерно таким:
Код:
procedure TForm28.Button1Click(Sender: TObject);
Var
WordApp: OLEVariant;
i: Integer;
begin
if not OpenDialog1.Execute then Exit;
WordApp := CreateOleObject('Word.Application');
WordApp.WordBasic.DisableAutoMacros;
for i := 0 to OpenDialog1.Files.Count - 1
do begin
WordApp.Documents.Open(OpenDialog1.Files.Strings[i], ReadOnly := True);
WordApp.ActiveDocument.PrintOut;
WordApp.ActiveDocument.Close;
end;
WordApp.Quit;
WordApp := Unassigned;
end; |