gpt4 book ai didi

delphi - 使用 Delphi 访问 Word 中的 Fields 集合

转载 作者:行者123 更新时间:2023-12-03 15:09:12 25 4
gpt4 key购买 nike

我有一个小方法,它试图枚举 Word 文档中的字段。自从我不得不做这种事情以来已经过去了很长时间,但现在我不能记住如何正确地做到这一点。

下面的代码使用 OleVariants,我已经尝试了一段时间并谷歌搜索没有提出德尔福解决方案。有人可以建议如何解决这个问题吗?

代码的最终目标是识别特定类型的字段并使用它删除所述字段的信息。

procedure TForm2.Button1Click(Sender: TObject);
var
I: Integer;
begin
If OpenDialog1.Execute Then
Begin
WordApp := CreateOLEObject( 'Word.Application' );
WordDocument := WordApp.Documents.Open( OpenDialog1.FileName, EmptyParam,
EmptyParam, EmptyParam,
EmptyParam, EmptyParam,
EmptyParam, EmptyParam,
EmptyParam, EmptyParam,
EmptyParam, EmptyParam,
EmptyParam, EmptyParam,
EmptyParam );
for I := 0 to WordDocument.Fields.Count - 1 do
begin
ShowMessage( WordDocument.Fields[ I ].Code );
end;
End;
end;

顺便说一下,我知道这段代码会让 Word 打开等等。

暂时还好,我目前主要关心的是让事情正常运转。

我也尝试将循环更改为:

for I := 0 to WordDocument.Fields.Count -1 do
begin
ShowMessage( WordDocument.Fields.Item( I ).Code );
end;

但是没用,告诉我“Item”不是集合的一部分。

我已经没有想法了。

最佳答案

看起来 Item 集合的基本索引是 1(而不是 0)。因此,您需要从 1 迭代到 WordDocument.Fields.Count 例如:

procedure TForm1.Button1Click(Sender: TObject);
var
WordApp, WordDocument, Field: OleVariant;
I: Integer;
begin
WordApp := CreateOleObject('Word.Application');
try
WordDocument := WordApp.Documents.Open('C:\MyDoc.doc');
if WordDocument.Fields.Count >= 1 then
for I := 1 to WordDocument.Fields.Count do
begin
Field := WordDocument.Fields.Item(I);
ShowMessage(Field.Code);
end;
finally
WordApp.Quit;
end;
end;

尝试访问 WordDocument.Fields.Item(0) 会导致错误:
请求的集合成员不存在。

我从 here 得到了这个提示

关于delphi - 使用 Delphi 访问 Word 中的 Fields 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19154718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com