我有一个包含很多表的文档。我想使用C#和Microsoft.Office.Interop.Word修改这些表。我读到可以使用Tables接口遍历所有表。

问题:是否可以为表指定名称/ ID并通过其名称访问表? (例如Powerpoint自动化中的形状)。

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

最佳答案

是否可以给表一个名称/ 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,如果不能简单地将文件升级到.docx),则为每个w:tbl元素创建自己的Id或Name属性。您可以使用自己的名称空间来消除歧义。这也将在Word会话中持续存在。与Interop相比,这是一个不同的世界,但在我看来,这是更好的途径(性能,可用的文档)。


  如果无法使用Microsoft.Office.Interop.Word,那么诸如Aspose Words之类的替代方法是否提供了更便捷的方法?


不,Aspose在其TableCollectionTable对象中不提供类似的功能。

关于c# - 使用C#在Word中按名称访问表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16032867/

10-17 00:27