使用c#在Word中按名称访问表

时间:2013-04-16 09:04:54

标签: c# office-interop

我有一个包含大量表格的文档。我想使用C#和Microsoft.Office.Interop.Word修改这些表。我读到我可以使用Tables接口迭代所有表。

问题:是否可以为表提供名称/ ID并按名称访问表? (与Powerpoint自动化中的形状一样)。

问题2:如果使用Microsoft.Office.Interop.Word是不可能的,那么像Aspose Words这样的替代方法是否提供了更方便的方式?

1 个答案:

答案 0 :(得分:4)

  

是否可以为表提供名称/ ID并按名称访问该表?

Table对象确实提供了ID属性,但这只是保存为网页的文档。我假设这不是你想要的。

然而,它仍然可能不是由API提供的;你需要自己创建这个功能。有两种方法:

一个:使用Interop,您可以检索表的哈希码(希望)返回一个唯一的ID。例如:

Word.Application wordApp = new Word.Application();
Word.Document wordDoc = wordApp.Documents.Open(@"C:\Users\username\Documents\HasTables.docx");
var tableID = wordDoc.Tables[1].GetHashCode();

彻底的解决方案可能是将文档中所有表的ID存储在Dictionary或具有键/值对映射的其他集合类型中。现在请注意,这些ID不会在Word会话中保留...因此,如果您需要能够识别同一会话之外的表,则需要使用其他方法。

二:使用OpenXML(用于.docx格式)和/或WordML(对于Word 2003 XML,如果您不能简单地将ocument升级到.docx)为每个创建自己的Id或Name属性w:tbl元素。您可以使用自己的命名空间来消除歧义。这也将在Word会话中持续存在。这是一个与Interop不同的世界,但在我看来,这是更好的路线(性能,可用文档)。

  

如果使用Microsoft.Office.Interop.Word无法实现,那么像Aspose Words这样的替代方法是否提供了更方便的方式?

不,Aspose在TableCollectionTable个对象中不提供此类内容。