通过Microsoft Word文档迭代查找和替换表

时间:2016-12-14 21:14:25

标签: c# ms-word office-interop

我有一些VBA代码遍历文档以从文档中删除表。以下代码在VBA中正常工作:

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

不幸的是,我不能轻易地将此代码转换为C#,大概是因为有一个较新的Range.Find方法。以下是我尝试过的三件事,每件事都失败了。

首次尝试(重写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)迭代文档,查找表格,然后执行功能,如选择,删除或替换它?

谢谢!

1 个答案:

答案 0 :(得分:0)

花了一些时间来解决这个问题。所有代码示例都在线,我错过了创建应用程序的必要性。对后人来说,这就是我解决问题的方法。

  1. 确保您有一个Using语句,如下所示:

    使用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.
    
  3. 您可以使用范围(rng)将表格替换为其他项目,例如文本,图像等。