Экспорт данных в MS Word

  • Автор темы -
  • Дата начала
Статус
Закрыто для дальнейших ответов.

Гость
#1
Доброго времени суток!

Кто-нибудь владеет навыками экспорта данных в MS Word? У меня есть код, передающий данные таблицы в текстовый редактор Word97. Может быть у кого-либо найдется код, который будет совместим и с другими версиями Word – 2000/XP?

Код:
procedure TFormOff.BtnWordClick(Sender: TObject);
var
Bookmark: TBookmark;
RangeW: Word97.Range;
v1: Variant;
ov1: OleVariant;
Row1: Word97.Row;
begin
WordDocument1.Activate;
WordDocument1.Range.Text := 'American Capitals from ' + Table1.TableName;
WordDocument1.Range.Font.Size := 14;
Table1.DisableControls;
try
 Bookmark := Table1.GetBookmark;
 try
  Table1.First;
  while not Table1.EOF do
  begin
   WordDocument1.Range.InsertParagraphAfter;
   WordDocument1.Paragraphs.Last.Range.Text :=
    Table1.FieldByName ('Name').AsString + #9 +
    Table1.FieldByName ('Capital').AsString;
   Table1.Next;
  end;
 finally
  Table1.GotoBookmark (Bookmark);
  Table1.FreeBookmark (Bookmark);
 end;
finally
 Table1.EnableControls;
end;
RangeW := WordDocument1.Content;
v1 := RangeW;
v1.ConvertToTable (#9, 19, 2);
Row1 := WordDocument1.Tables.Item(1).Rows.Get_First;
Row1.Range.Bold := 1;
Row1.Range.Font.Size := 30;
Row1.Range.InsertParagraphAfter;
ov1 := ' ';
Row1.ConvertToText (ov1);
end;
 

admin

Well-Known Member
08.08.2003
2 754
1
#2
Джангл Виталий
Под 2000/XP компоненты другие идут.
 

Гость
#4
Спсибо за помощь! Я уже допетрил сам, иначе бы я давно лишился работы =)
 

admin

Well-Known Member
08.08.2003
2 754
1
#5
Джангл Виталий
можно вот как
Если используешь шаблон, то вариант такой:
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 на первую ячейку, далее в цикле вызываешь вордовский макрос создания новой строки и с помощью макросов перехода по ячейкам вбиваешь данные из набора.

(с) Delphiworld
 
Статус
Закрыто для дальнейших ответов.