我有一些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)迭代文档,查找表格,然后执行功能,如选择,删除或替换它?
谢谢!
答案 0 :(得分:0)
花了一些时间来解决这个问题。所有代码示例都在线,我错过了创建应用程序的必要性。对后人来说,这就是我解决问题的方法。
确保您有一个Using语句,如下所示:
使用MsWord = Microsoft.Office.Interop.Word;
打开文档,然后使用新的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)将表格替换为其他项目,例如文本,图像等。