以编程方式在Word文档中查找表

时间:2010-11-22 17:37:24

标签: visual-studio ms-word vsto

我想用这种方法更新word文档中的各种表格... http://msdn.microsoft.com/en-us/library/2dw39e8e.aspx

我基本上会根据SQL视图添加行。我遇到的问题是尝试在Word文档中以编程方式查找表对象,以便我可以添加行。有许多表,它们可以位于文档的不同位置。我找不到可以在Word文档中编辑的“TableID”字段或类似内容,因此我可以通过编程方式找到它。

我正在使用Word 2010和Visual Studio 2010。

感谢您的帮助, 亚伦

2 个答案:

答案 0 :(得分:1)

Table对象确实具有可以获取/设置的ID属性,但它仅用于保存为网页,因此在.doc(x | m)中不保存任何设置的ID格式。

在Word 2010中添加了一个可以使用的描述字段(.Descr),但即使Word 2007也不支持它,我不知道如果您在其他地方使用您的工作,那将是一个问题你声明的环境。

Dim cTbl, targetTbl As Table

For Each cTbl In ActiveDocument.Tables
    If cTbl.Descr = "target-id" Then
        Set targetTbl = cTbl
        Exit For
    End If
Next

如果没有,最好的选择是确保表中有一个已知的包含ID的单元格,然后在表格中循环直到找到所需的单元格。要么是在表顺序之前有知识(这似乎不是你的方案的选项)。可以想象,您可以为每个表使用自定义样式,这些样式不执行任何操作,但其名称可用于标识 - 类似于在HTML DOM中使用css类进行标识。

答案 1 :(得分:1)

您可以将表格放在内容控件中。内容控件可以具有ID(以及标签和标题)。

添加行的另一种方法是将相关行包装在内容控件中,然后重复它。在此模型上,您将SQL数据放在自定义XML部分中。内置数据绑定不支持重复内容,但您可以通过VSTO和/或Open XML SDK执行此操作。我在dev.plutext.org/svn/docx4j/trunk/docx4j/sample-docs/databinding/conventions.html

中建议了如何设置它的约定。