Word VSTO - 为什么paraId有时会丢失

时间:2018-05-02 14:12:58

标签: ms-word vsto openxml

我从openXML中检索段落样式名,并使用paraID属性来获取正确的名称。

在测试期间,我注意到,根据word文档,该属性可能不会出现在任何段落上。

我知道这是Word的内部运行时段落ID。

所以问题是:在段落上生成paraId属性的原因似乎无法解决这个问题。

PS。我不想使用get_style(),因为那太慢了......

编辑:添加代码示例

  

这是在一些文件" 0"在某些文档中有效的十六进制ID

string sParaId = range.Paragraphs.First.ParaID.ToString("x").ToUpper();
  

这个打开的xml文档有时具有有效的w14:paraId属性,有时它会丢失:

activeDocument = Globals.ThisAddIn.Application.ActiveDocument;
wordXML = XElement.Parse(activeDocument.WordOpenXML);

...我想从WordOpenXML获得类似这样的styleName,但是现在看来我可能会选择其他选项,因为我不知道何时在XML中添加了paraId。

paraEl = ooXMLElementList.Descendants().Where(x => x.Name.LocalName == 
"p").FirstOrDefault(x => x.Attribute(w14 + "paraId")?.Value == sParaId);

styleName = paraEl.Descendants().FirstOrDefault(x => x.Name.LocalName == 
"pStyle") != null ? paraEl.Descendants().FirstOrDefault(x => 
x.Name.LocalName == "pStyle").Attribute(w + "val").Value : "Normal";

1 个答案:

答案 0 :(得分:0)

来自Paragraph.ID的Word语言参考:

  

返回或设置指定对象的标识标签   当前文档保存为网页。

由于文档未保存为HTML,因此该属性没有意义。

开发人员不会公开ParaId property。它在VBA对象模型中不可见,但由于生成PIA(主互操作程序集)的方式,.NET开发人员将看到它。从语言参考:

  

保留供内部使用。

不确定你真正想要做什么,但你可以使用Word的Range.Find功能来搜索格式(样式)。