2015-12-01 83 views
0

我是使用Delphi的Ole word自動化的新手。我有一個示例文件,裏面有很多表格。我可以通過查找單詞中的形狀並在其中插入值來插入圖像。但我無法找到一個特定的表並使用delphi更新一些值。有沒有辦法?謝謝 !如何在word中查找表格並使用delphi更新表格中的值

enter image description here

+0

我敢肯定,有很多例子只是一個網絡搜索 –

+0

感謝您的答覆,但所有我不幸找到的那些人,創建一個新表,並填寫它們,但不是找到現有的表並更新它們 –

+1

看看Deborah Pate的自動化頁面,特別是[Word表格](http://www.djpate.freeserve.co.uk/AutoWord.htm#Tables)。 –

回答

2

我假設你問的主要是如何找到表格,而不是如何改變表格的內容。如何做到這一點取決於你想用來找到感興趣的表的標準。

表面上,你應該能夠使用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是否成功,而不檢查某些與可能使用Find找到的表相關的文本。當然,如果文檔保證包含您要查找的表格,Goto的這個問題可能不需要關注您。

2

也許是這樣的:

Word.ActiveDocument.Tables.Item(1)。細胞(1,1).Range.Text:= '一些文本';

相關問題