Delphi MailMerge Word2010 новая команда страницы - PullRequest
1 голос
/ 08 июля 2011

Я пытаюсь обновить свое членское программное обеспечение, написанное на Delphi, для отправки в Word2010.

Я использую

wrdApp := CreateOleObject('Word.Application');
wrdDoc := wrdApp.Documents.add();

, затем для каждого имени поля слияния в шаблоне IЯ заменяю его соответствующим значением поля из таблицы.

Я успешно сделал это для отдельных членов благодаря предыдущему ответу: MS Word 2010 mailmerge в Delphi 5

Однако у меня возникают проблемы с повторением этого кода для всех членов таблицы.В идеале мне нужно, чтобы шаблон отображался на новой странице в том же документе с подробными сведениями о следующих членах.

В настоящее время я могу перезаписывать только один и тот же документ для каждого участника или каждый раз создавать новый документ.

Может кто-нибудь посоветовать мне, как воссоздать шаблон на следующей странице, объединить несколько документов в один и тот же или предложить альтернативный метод.

большое спасибо

Ответы [ 2 ]

1 голос
/ 10 июля 2011

На самом деле вы не создаете mailmerge.

Вот некоторый код (см. Примечание ниже), который может помочь.Он использует компонент TWordApplication Delphi для обработки соединения и предоставления типов данных, но он должен дать вам направление для ввода:

// Drop a TWordApplication (from the Servers palette page) on a new blank form,
// and change it's name to WordApp. No other property changes or components are
// used.

procedure TForm1.FormCreate(Sender: TObject);
var
  Doc: _Document;
  DBName: string;
  Pause, SQL, Connection, SaveChanges: OleVariant;
begin
  WordApp.Connect;
  Doc := WordApp.Documents.AddOld(EmptyParam, EmptyParam);
  WordApp.Visible := True;

  SetUpMergeDoc(Doc);
  DBName := 'YourDatabasePath\DatabaseName';
  Connection := 'YourADOorODBCConnectionString';
  SQL := 'SELECT * FROM customer';
  Doc.MailMerge.OpenDataSource(DBName, EmptyParam, EmptyParam, EmptyParam,
                               EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                               EmptyParam, EmptyParam, EmptyParam, Connection,
                               SQL, EmptyParam, EmptyParam, EmptyParam);
  // Do the actual mailmerge.
  Pause := False;
  Doc.MailMerge.Destination := wdSendToNewDocument;
  Doc.MailMerge.Datasource.FirstRecord := wdDefaultFirstRecord;
  Doc.MailMerge.Datasource.LastRecord := integer(wdDefaultLastRecord);
  Doc.MailMerge.Execute(Pause);

  // Save the mailmerged document
  SaveChanges := wdDoNotSaveChanges;
  WordApp.Quit(SaveChanges, EmptyParam, EmptyParam);
  Doc := nil;
  WordApp := nil;
end;

procedure TForm1.SetUpMergeDoc(Doc: _Document);
var
  R: Range;
  Direction: OleVariant;
begin
  R := Doc.Range(EmptyParam, EmptyParam);

  Direction := wdCollapseEnd;
  R.InsertAfter('Dear ');
  R.Collapse(Direction);

  { Insert a field with the name of the datasource field }
  Doc.MailMerge.Fields.Add(R, 'Company');
  R := Doc.Range(EmptyParam, EmptyParam);
  R.Collapse(Direction);
  R.InsertParagraphAfter;
  R.InsertAfter('We have yet to receive payment for our invoice of ');
  R.Collapse(Direction);
  Doc.MailMerge.Fields.Add(R, 'LastInvoiceDate');
  R := Doc.Range(EmptyParam, EmptyParam);
  R.Collapse(Direction);
  R.InsertAfter('.');
  R.InsertParagraphAfter;
  R.InsertAfter('Cough up or we''ll send the boys round.');
  R.InsertParagraphAfter;
end;

ПРИМЕЧАНИЕ. Большая часть этого кода была получена из загруженного пример Я получил со страницы Word автоматизации веб-сайта Деборы Пейт .(Дебора была (и все еще может быть) членом TeamB.) Я просто изменил ее для подключения через TWordApplication и обновил до компиляции в Delphi XE.

Как я уже сказал, он использует TWordApplication дляустановить соединение с Word и раскрыть используемые методы и типы.Все остальное делается в самом коде.

0 голосов
/ 09 июля 2011

Похоже, вы не выполняете почтовое слияние, а ищите и заменяете.Для этого есть причина?В противном случае, почему бы просто не создать «реальное» почтовое сообщение, которое решило бы ваши проблемы.

...