5

Word 文書のフィールドを列挙しようとする小さなメソッドがあります。この種のことをしなければならなかった時からかなりの時間が経ちましたが、今ではそれを適切に行う方法を思い出せません.

以下のコードは OleVariants を使用しています。しばらく試してみましたが、グーグルで調べても Delphi ソリューションが見つかりませんでした。誰でもこれを修正する方法を提案できますか?

コードの最終的な目標は、特定の種類のフィールドを識別し、その情報を使用してそのフィールドを削除することです。

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;

しかし、「アイテム」はコレクションの一部ではないと言われました。

アイデアが尽きた。

4

1 に答える 1

7

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)エラーが発生します:
The requested member of the collection does not exist.

ここからヒントを得ました

于 2013-10-03T10:11:54.413 に答える