Я создал небольшую программу для чтения всего текста из .docx с помощью Delphi. Он работает с обычным текстом и с быстрыми частями, но ни одно из решений, которые я нашел на форумах и в учебных пособиях, не работает для моих текстовых полей или полей формы. Я использую Word 2013 и Delphi XE7, и мой документ имеет 2 поля формы, одно из которых называется «Имя», другое «Автор» и одно текстовое поле.
Вот мой код:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
WordApplication1.Disconnect;
WordDocument1.Disconnect;
try
WordApplication1.Connect;
WordApplication1.Visible := true;
WordDocument1.ConnectTo(WordApplication1.Documents.Open(
'C:\homelaufwerk\Documents\Embarcadero\Studio\Projekte\Word test\testDoc.docx',
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam));
memo1.Clear;
memo1.Text := '';
for I := 1 to WordDocument1.Paragraphs.Count do
begin
memo1.Text := memo1.Text + WordDocument1.Paragraphs.Item(i).Range.Text + #13#10;
end;
memo1.Text := memo1.Text + WordApplication1.ActiveDocument.FormFields.Item('Author').Result;
memo1.Text := memo1.Text + WordApplication1.ActiveDocument.FormFields.Item('Name').Result;
for I := 1 to WordApplication1.ActiveDocument.Fields.Count do
begin
memo1.Text := memo1.Text + WordApplication1.ActiveDocument.Fields.Item(1).Result;
end;
WordDocument1.Close;
except
ShowMessage('Microsoft Word couldn''t start.');
end;
end;
Я также пробовал это для текстового поля:
WordDocument1.Fields.Item(1).Select;
memo1.Text := memo1.Text + WordApplication1.Selection.Text;
и везде я заменил WordApplication1.ActiveDocument.[...] на WordDocument1.[...] и наоборот...ничего не работает.
Когда я отлаживаю, функция .Count для текстового поля всегда возвращает 0, и при попытке получить .Result для полей формы я получаю сообщение об ошибке, что поля не могут быть найдены (не знаю формулировку ошибки на английском языке) .
Кто-нибудь знает, что я делаю неправильно и как это будет работать?
Заранее спасибо,
Леа