MS Word 2010 mailmerge в Delphi 5 - PullRequest
       16

MS Word 2010 mailmerge в Delphi 5

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

кто-нибудь может помочь?

Я унаследовал некоторое программное обеспечение, написанное на Delphi 5, которое позволяет использовать данные и поля членов из базы данных (файл .ADT), объединенные в слово.

Отлично работает со всеми версиями Word, кроме 2010, где он не загружает документы и выдает ошибку:

«Этот метод недоступен для этого объекта»

Мне сказали, что решение состоит в том, чтобы заменить предустановленные компоненты OpWord и OpDataSet вариантами Ole. Я сделал это с OpWord, используя:

wrdApp: = CreateOleObject ('Word.Application');

и документы теперь загружаются, но без каких-либо данных поля слияния. Может кто-нибудь дать мне знать, как извлечь эти данные из базы данных, так как OpDataSet, кажется, просто указывает на таблицу?

Или кто-нибудь может предложить лучшее решение, чем то, которое я пробую. Я очень новичок в Delphi, так что я в порядке над головой

Редактировать: (запрошенная информация)

Извините, у меня есть более подробная информация и код, если требуется.

Компоненты, по-видимому, принадлежат библиотеке OfficePartner вместе с TOpExcel, TOpOutlook и другими.

.doc выбирается из всплывающего окна ListPane в Form30, открывается и заполняется данными поля слияния из таблицы 4. Таблица 1 - это база данных членов:

  {Use Table4 as we can Set a range on it}
  Table4.SetRange([Table1.FieldByName('Member Id').AsString],[Table1.FieldByName('Member Id').AsString]);

  {Open Word}
  OpWord1.Connected := True;

  {Open the Test Document}
  OpWord1.OpenDocument(DocumentDirectory + '\' + Form30.ListBox1.Items[Form30.ListBox1.ItemIndex]);

  {Populate the Test Document}
  OpWord1.ActiveDocument.MailMerge.OfficeModel := OpDataSetModel1;
  OpWord1.ActiveDocument.PopulateMailMerge;
  OpWord1.ActiveDocument.ExecuteMailMerge;

Надеюсь, это поможет ...

1 Ответ

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

Вот небольшая процедура для слияния Word Mail, которую я использовал еще для D6, это просто фрагмент, и вы должны включить в какой-то класс, у меня больше нет Delphi, поэтому я не могу скомпилировать, чтобы убедиться, что он работает, в любом случае вот оно, надеюсь, это поможет:

procedure MailMergeWord;
var
  WordApp: TWordApplication;
  WordDoc: TWordDocument;
  doc : WordDocument;
  FileName: OleVariant;
  xx: integer;
begin
  WordApp := TWordApplication.Create(nil);
  WordApp.ConnectKind := ckNewInstance;
  WordDoc := TWordDocument.Create(WordApp);
  FileName := 'TemplateDoc.doc';

  doc := WordApp.Documents.Open(FileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam
                                 ,EmptyParam,EmptyParam,EmptyParam,EmptyParam
                                 ,EmptyParam);

  WordDoc.ConnectTo(Doc);
  for xx := 1 to WordDoc.Fields.Count do
    WordDoc.Fields.Item(xx).Result.Text := OnWordVariable(WordDoc.Fields.Item(xx).Code.Text);
  WordDoc.PrintOut;
  WordDoc.Free;
  WordApp.Free;
end;


function OnWordVariable(varName: string): string;
begin
  Result := 'Value based on variable name';
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...