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

C# 使用c在Word中按名称访问表#,c#,office-interop,C#,Office Interop,我有一个包含很多表格的文档。我想使用C#和Microsoft.Office.Interop.Word修改这些表。我读到我可以使用tables接口遍历所有表 问题:是否可以给表一个名称/ID并通过其名称访问表?(与Powerpoint自动化中的形状类似) 问题2:如果无法使用Microsoft.Office.Interop.Word,那么像Aspose Word这样的替代方案是否提供了更方便的方法 是否可以为表指定一个名称/ID并通过其名称访问该表 表对象确实提供了一个属性,但这只是保存为网页的文

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

问题:是否可以给表一个名称/ID并通过其名称访问表?(与Powerpoint自动化中的形状类似)

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

是否可以为表指定一个名称/ID并通过其名称访问该表

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

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

One:使用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存储在字典或另一个具有键/值对映射的集合类型中。现在请注意,这些ID不会在Word会话中持久存在……因此,如果需要能够识别同一会话之外的表,则需要使用另一种方法

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

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

不,Aspose在其或对象中不提供类似的内容

是否可以为表指定一个名称/ID并通过其名称访问该表

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

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

One:使用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存储在字典或另一个具有键/值对映射的集合类型中。现在请注意,这些ID不会在Word会话中持久存在……因此,如果需要能够识别同一会话之外的表,则需要使用另一种方法

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

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


不,Aspose在其文件或对象中不提供类似的内容。

文件中是否需要保留名称或ID?例如,关闭/重新打开?如果是这样,这将显著改变解决方案的性质名称或ID是否需要与文档保持一致?例如,关闭/重新打开?如果是这样,这将显著改变解决方案的性质非常感谢您提供的详细答案!我将仔细研究OpenXML格式,因为ID应该与文档保持一致。我现在必须检查在使用OpenXML时是否可以确定给定表格单元格的高度(我所做的是:打开给定文档,执行大量查找/替换操作,并测量结果单元格的高度)。非常感谢您提供的详细答案!我将仔细研究OpenXML格式,因为ID应该与文档保持一致。我现在必须检查在使用OpenXML时是否可以确定给定表单元格的高度(我所做的是:打开给定文档,执行大量查找/替换操作,并测量结果单元格的高度)。