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