Создание отчета в MS Word
(Пример для Delphi 1.0 поскольку в Delphi 2-3 лучше использовать: var MsWord : variant; MsWord := CreateOleObject('Word.Basic'); Для Delphi 3, пример ниже)
Создавать отчет в программе Word удобно если отчет имеет сложную структуру (тогда его быстрее создать в Word, чем в Qreport от Delphi, кроме того, этот QReport имеет "глюки"), либо, если после создания отчета его нужно будет изменять. Итак, первым делом в Word создается шаблон будущего отчета, это самый обыкновенный не заполненный отчет. А в места куда будет записываться информация нужно поставить метки. Например (для наглядности метки показаны зеленым цветом, реально они конечно не видны):
Далее в форму, откуда будут выводиться данные, вставляете компоненту DdeClientConv из палитры System. Назовем ее DDE1. Эта компонента позволяет передавать информацию между программами методом DDE. Свойства: ConnectMode : ddeManual - связь устанавливаем вручную DdeService : (winword) - с кем устанавливается связь ServiceApplication : C:\MSOffice\Winword\WINWORD.EXE - полный путь доступа к программе. (Вот здесь можно наступить на грабли. Ведь Word может лежать в любой папке! Поэтому путь доступа к нему лучше взять из реестра, а еще лучше использовать OLE см.начало раздела)
Теперь пишем процедуру передачи данных:
{ Печать накладной } procedure Form1.PrintN; Var S : string; i : integer; Sum : double; {итоговая
сумма, кстати,совет: не пользуйтесь типом real!} Tv, Ss : PChar; beg!
in S:=GetCurrentDir+'\Накладная.doc'; { имя открываемого документа } DDE1.OpenLink; { устанавливаем связь } Tv:=StrAlloc(20000); Ss:=StrAlloc(300); { выделяем память } { даем команду открыть документ и установить курсор в начало документа } StrPCopy(Tv, '[FileOpen "'+S+'"][StartOfDocument]'); S:=NNakl.Text; { номер накладной } { записываем в позицию Num номер накладной } StrCat(Tv, StrPCopy(SS, '[EditBookmark .Name = "Num", .Goto][Insert "'+S+'"]'+ '[EditBookmark .Name = "Table", .Goto]'); { и переходим к заполнению таблицы } { передаем данные в Word } if not DDE1.ExecuteMacro(Tv, false) then begin { сообщаем об ошибке и выход } MessageDlg('Ошибка связи с Microsoft Word.', mtError, [mbOk], 0); StrDispose(Tv); StrDispose(Ss); exit; end;
{ Заполняем таблицу } Sum:=0; Nn:=0; for i:=0 to TCount do!
begin inc(Nn); { предполагаем, что данные находятся в массиве T } StrPCopy(Tv, '[Insert "'+IntToStr(Nn)+'"][NextCell][Insert "'+T[i].Company+'"]'+ '[NextCell][Insert "'+T.TName+'"][NextCell][Insert "'+T.Cod+'"][NextCell]'+ '[Insert "'+IntToStr(T.Count)+'"][NextCell]'+ '[Insert "'+FloatToStr(T.Cena)+'"][NextCell]'+ '[Insert "'+FloatToStr(T.Count*T.Cena)*+'"][NextCell]')); inc(Nn); Sum:=Sum+(T.Count*T.Cena); { итоговая сумма } if not DDE1.ExecuteMacro(Tv, false) thenbegin MessageDlg('Ошибка связи с Microsoft Word.', mtError, [mbOk], 0); exit; end; end;
{ Записываем итоговую сумму } StrPCopy(Tv, '[NextCell][Insert "Итого"][NextCell][NextCell][NextCell]'+ '[Insert
"'+FloatToStr(Sum)+'"]')); if not DDE1.ExecuteMacro(Tv, false) then MessageDlg('Ошибка связи с Microsoft Word.', mtError, [mbOk], 0) else MessageDlg('Акт удачно создан. Перейдите в Microsoft Word.', mtInformation, [mbOk], 0);
StrDispose(Tv); StrDispose(Ss); end;
Для Delphi 2 и выше === Cut Пример by Sergey Arkhipov 2:5054/88.10 ===
Пример проверен только на русском Word 7.0! Может, поможет...
unit InWord; interface uses ... ComCtrls; // Delphi3 ... OLEAuto; // Delphi2 [skip] procedure TPrintForm.MPrintClick(Sender: TObject); var W: Variant; S: String; begin S:=IntToStr(Num); try // А вдруг где ошибка :) W:=CreateOleObject('Word.Basic'); // Создаем документ по шаблону MyWordDot // с указанием пути если он не в папке шаблонов Word
W.FileNew(Template:='C:\MyPath\DB\MyWordDot',NewTemplate:=0); // Отключение !
фоновой печати (на LJ5L без этого был пустой лист) W.ToolsOptionsPrint(Background:=0);
Спасибо Сергею :) И еще, как определить установлен ли на компьютере Word, запустить его и загрузить в него текст из программы?
Пример:
var MsWord: Variant; ... try // Если Word уже запущен MsWord := GetActiveOleObject('Word.Application'); // Взять ссылку на запущенный OLE объект except try
// Word не запущен, запустить MsWord := CreateOleObject('Word.Application')!
; // Создать ссылку на зарегистрированный OLE объект MsWord.Visible := True; except ShowMessage('Не могу запустить Microsoft Word'); Exit; end; end; end; ... MSWord.Documents.Add; // Создать новый документ MsWord.Selection.Font.Bold := True; // Установить жирный шрифт MsWord.Selection.Font.Size := 12; // установить 12 кегль MsWord.Selection.TypeText('Текст');
По командам OLE Automation сервера см. help по Microsoft Word Visual Basic.
Сканер штрих-кодов IT3800pdf-12
Дело в следующем. Для того, чтобы правильно настроить вышеуказанный сканер, нужно после включения питания компа хотя бы ...
Самоучитель Kylix
Книга посвящена новому продукту фирмы Borland - объектно-ориентированной среде для быстрой разработки приложений под Linux. Рассматривается версия Kylix 1.0 Server Developer. Приводятся приемы работы с графическими компонентами, принципы создания приложений баз данных и собственных компонентов. Дается краткое описание языка программирования Object Pascal. Последняя часть книги посвящена проблеме создания межплатформенных приложений, которые работают как в среде Linux, так и в Windows. Изложение сопровождается многочисленными примерами и фрагментами кода.Для программистов
Автор: Понамарев В.
Programming Nest Сайт посвященный программингу, содержит в себе много различных программ и их исходников. Будет полезен и интересен каждому, профессионалу или совсем делитанту.
» Оценка сайта: 2
Дорогие друзья! Мы рады представить вам новый совместный проект сайтов www.rsdn.ru, delphi.mastak.ru и www.optim.ru - профессиональный журнал для программистов RSDN Magazine.
Несомненно, ваше мнение о необходимости такого журнала, содержании рубрик и темах отдельных статей поможет сделать журнал более полезным и интересным. Высказать свое мнение, проголосовать или же подписаться вы можете на сайте. Без вашего участия, нам будет трудно сделать правильный журнал!
На сайте выложен анонс пилотного выпуска журнала, вступительное слово от редакции.
Для души
Хокку дня
облака в луже - ближе
Афоризмы
Забытая мысль всегда кажется значительной (Эмиль Кроткий)
Фраза дня
Душа просит ананасов в шампанском, организм требует водки!
Дурацкие законы (информация предоставлена сайтом kurilka.com)
В городе Аннистон в Алабаме (США) запрещено появляться в джинсах на главной улице.
На Аляске (США) нельзя рассматривать лосей с самолета
И на закуску коротенький анекдот
Найден щенок бультерьера. Большая просьба к хозяевам: ЗАБЕРИТЕ ПОСКОРЕЕ ЭТУ СВОЛОЧЬ!