![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Добрый день.
В цикле формируются docx файлы (распаковка как zip архив, парсинг XMLб подмена значений, запаковка обратно в архив), которые необходимо печатать в порядке их формирования. Файлов много ~ 2000 за 1 прогон. Сейчас они у меня просто складываются в папку, а потом от туда методично... ПКМ - печать. Сами понимаете... Как это дело автоматизировать? Я догадываюсь, что нужно использовать что-то вроде Код:
shellexecute('print', fullfilename, ...) Для начала можно просто ждать пока закроется только что запущенный процесс. Но как получать Handle после ShellExecute экземпляра Word я не разобрался. Прошу помощи в этом вопросе. |
#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; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |