2016-12-14 126 views
0

我有一些VBA代碼遍歷文檔以從文檔中刪除表格。下面的代碼在VBA正常工作:遍歷Microsoft Word文檔來查找和替換表格

Set wrdDoc = ThisDocument 
With wrdDoc 
    For Each tbl In wrdDoc.Tables 
     tbl.Select 
     Selection.Delete 
    Next tbl 
End With 

不幸的是,我不能輕易因爲有一個新的Range.Find方法翻譯這個代碼爲C#,大概。以下是我嘗試過的三件事,每件都失敗了。

第一次嘗試(VBA代碼重新寫):

foreach (var item in doc.Tables) 
{ 
    item.Delete; //NOPE! No "Delete" function. 
} 

我嘗試這樣做:

doc = app.Documents.Open(sourceFolderAndFile); //sourceFolderAndFile opens a standard word document. 
var rng = doc.Tables; 
foreach(var item in rng) 
{ 
    item.Delete; //NOPE! No "Delete" function. 
} 

我也試過這樣:

doc = app.Documents.Open(sourceFolderAndFile); //sourceFolderAndFile opens a standard word document. 
var rng = doc.Tables; 
Range.Find.Execute(... //NOPE! No Range.Find available for the table collection. 
... 

可能有人請幫助我瞭解如何使用C#和Word Interop(Word 2013和2016)遍歷文檔,查找表,然後按形成一個功能,就像選擇它,刪除它或替換它一樣?

謝謝!

回答

0

我花了一些時間來解答這個問題。所有的代碼示例都在線,我錯過了創建應用程序的需求。爲了後代,這是我如何解決問題。

  1. 確保你有一個使用的語句,像這樣:

    使用MSWORD =的Microsoft.Office.Interop.Word;

  2. 打開文檔,然後使用新的msWord引用,範圍和表格。我下面提供一個基本的例子:

     //open the document. 
         doc = app.Documents.Open(sourceFolderAndFile, ReadOnly: true, ConfirmConversions: false); 
    
         //iterate through the tables and delete them. 
         foreach (MsWord.Table table in doc.Tables) 
         { 
          //select the area where the table is located and delete it. 
          MsWord.Range rng = table.Range; 
          rng.SetRange(table.Range.End, table.Range.End); 
          table.Delete(); 
         } 
    
         //don't forget doc.close and app.quit to clean up memory. 
    

可以使用範圍(RNG)與其他項目替換表,如文本,圖像等

+0

也許你應該使用一個向後的循環?這是您通常要從集合中刪除項目時所要執行的操作。你爲什麼使用SetRange? – Jbjstam

+0

據我所知,沒有必要做一個後向循環,因爲所有的表格都是從頭到尾找到的。至於SetRange,這是最好的方式(據我所知)選擇表格然後刪除它。如果你有更好的選擇,我都是耳朵:) – Bill

相關問題