如何在word中查找表并使用delphi更新表中的值

时间:2015-12-01 13:56:40

标签: delphi ms-word ole

我是使用Delphi进行Ole word自动化的新手。我有一个示例文档,里面有很多表。我可以通过在单词中查找形状并在其中插入值来插入图像。但是我无法找到特定的表并使用delphi将一些值更新到其中。有办法吗?谢谢 !

enter image description here

2 个答案:

答案 0 :(得分:3)

我假设您主要询问如何查找表,而不是之后如何更改表的内容。如何执行此操作取决于您要用于查找感兴趣的表的条件。

从表面上看,您应该能够使用MS Word的Selection对象的Goto方法导航到给定的表格。但是,由于Goto没有找到正确的表格,因此在检测操作失败时会出现问题(请参阅本答案末尾)。

如果感兴趣的表格在文档中以标识文本标签开头,您可以直接搜索标签,如果找到,则从中向前导航,就像在“Table3”标签后找到表格的示例:

procedure TForm1.Button4Click(Sender: TObject);
var
  AFileName : String;
  MSWord,
  Document : OleVariant;
  Found : WordBool;
begin
  AFileName := 'd:\aaad7\officeauto\Tables.Docx';

  MSWord := CreateOleObject('Word.Application');
  MSWord.Visible := True;
  Document := MSWord.Documents.Open(AFileName);

  MSWord.Selection.Find.Text :='Table3';
  Found := MSWord.Selection.Find.Execute;
  if Found then begin
    MSWord.Selection.MoveDown( Unit:=wdLine, Count:=1);
  end;
end;

如上所述,“if Found ...”块仅将光标放在表格第一个单元格的第一个字符上。进入表格后,您可以根据需要更改其内容。

如果您想了解如何在表格单元格中插入图像等操作,请转到Word功能区上的“开发人员”选项卡,录制执行所需操作的宏,然后使用编辑弹出窗口查看它 - 通常很容易将其粘贴到Delphi并将其编辑成等效的Delphi代码。对于找到所需表格的其他方法也是如此 - 录制宏然后翻译它。

要在文档中找到第N个表并将光标置于其左上角的单元格中,您可以执行以下操作:

procedure TForm1.Button2Click(Sender: TObject);
var
  AFileName : String;
  MSWord,
  Document,
  Tables,
  Table : OleVariant;
  TableNo : Integer;
begin
  AFileName := 'd:\aaad7\officeauto\Tables.Docx';

  MSWord := CreateOleObject('Word.Application');
  MSWord.Visible := True;
  Document := MSWord.Documents.Open(AFileName);

  TableNo := 3;

  Tables := Document.Tables;

  if TableNo <= Tables.Count then begin
    Table := Tables.Item(TableNo);
    Table.Select;
    MSWord.Selection.MoveLeft( Unit:=wdCharacter, Count:=1);
  end;

end;

顺便说一下,在Word的“查找”对话框的Goto标签上,Table列表框中有Go to what个条目。您可以使用类似

之类的代码在代码中调用它
MSWord.Selection.GoTo(What:= wdGoToTable, Which:=wdGoToFirst, Count:=3);  

问题在于如何检查代码是否成功。与Find返回一个WordBool不同,Goto返回一个Range对象。如果您尝试使用它转到仅包含2个表的文档中的第10个表,则不会引发错误,但返回的范围是文档中的最后一个表。我还没有找到一种方法来检查返回的Range是否Goto成功,而不检查与表相关的一些文本,这些文本可能是首先使用Find找到的。当然,如果文件保证包含您正在寻找的表格,Goto的这个问题可能不需要您关注。

答案 1 :(得分:2)

可能是这样的:

Word.ActiveDocument.Tables.Item(1).Cell(1,1).Range.Text:=&#39; some text&#39;;