скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Экспорт информации из базы данных в Word



Автор: Uncle B.

Если используешь шаблон, то вариант такой:
1. В шаблоне Word'a в нужные места расставляешь Bookmark (Insert->Bookmark).
2. В проге позиционируешь на этот букмарк и пишешь данные.


(WrdApp - TWordApplication)

procedure TfrmPToClient.bbCreateClick(Sender: TObject);
var
  InvoiceTemplate: OleVariant;
begin
  // Соединение с OLE-сервером
  WrdApp.Connect;
  WrdApp.Visible := True;
  // выбор шаблона
  if not FileExists(dlgOpen.FileName) then
    Exit;
  InvoiceTemplate := edFileName.Text;
  // открытие выбраного шаблона в Word'e
  WrdApp.Documents.Add(InvoiceTemplate, EmptyParam);
  WordGotoBookmark('PDate');
  WordInsertText(' ' + DateToStr(dtpPDate.Date));
  WordGotoBookmark('PNr');
  WordInsertText(' ' + edPNr.Text);
  WordGotoBookmark('PClientName');
  WordInsertText(' ' +
    dmIB_TOIS.tblProject.FieldByName('ProjectClientName').asString);
  WordGotoBookmark('ContractNr');
  WordInsertText(' ' + dmIB_TOIS.tblProject.FieldByName('CLWordGotoBookmark('
    ContractDate');
    WordInsertText(' ' +
      dmIB_TOIS.tblProject.FieldByName('CL_ContractDate').asString);
    WordGotoBookmark('PCargoName');
    WordInsertText(' ' +
      dmIB_TOIS.tblProjectCargo.FieldByName('CargoName').asString);
    WordGotoBookmark('PProjectYear');
    WordInsertText(' ' +
      dmIB_TOIS.tblProject.FieldByName('PROJECTNOTICEYEAR').asString);
    WordGotoBookmark('PProjectMonth');
    WordInsertText(' ' +
      arMonths[dmIB_TOIS.tblProject.FieldByName('PROJECTNOTICEMonth').asInteger]);
end;

procedure TfrmPToClient.WordGotoBookmark(Bookmark: string);
var
  What: OLEVariant;
  Which: OLEVariant;
  Count: OLEVariant;
  Name: OLEVariant;
begin
  What := wdGoToBookmark;
  Which := unAssigned;
  Count := unAssigned;
  Name := Bookmark;
  WrdApp.Selection.GoTo_(What, Which, Count, Name);
end;

procedure TfrmPToClient.WordInsertText(Text: string);
begin
  WrdApp.Selection.TypeText(Text);
end;

В случае, если нужно вывести набор записей (например в вордовскую таблицу), то вариант такой :
1. В шаблоне Ворда рисуешь "болванку" таблицы, делаешь макрос вставки новой строки в таблицу и можно ещё простые макросы перехода по ячейкам таблицы.
2. В проге позиционируешь через Bookmark на первую ячейку, далее в цикле вызываешь вордовский макрос создания новой строки и с помощью макросов перехода по ячейкам вбиваешь данные из набора.

Кстати, если будешь делать вывод набора записей - выложи пример, а то теоретически я себе это представляю, а до практики руки не дошли.






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook