打开XML SDK 2.5文档验证:' smtClean'属性未声明

时间:2016-05-25 12:03:07

标签: vb.net validation xpath powerpoint openxml-sdk

我们当前的工作项目涉及打开Microsoft PowerPoint文件(.pptx格式),更改一些文本和图表值,然后将编辑后的版本呈现给最终用户。

到目前为止,这种方法效果相当不错,但是当我尝试在之后验证文档时会发生什么,我感到很困惑。使用DocumentFormat.OpenXml.Validation.OpenXmlValidator类,我运行Validate函数,并将PresentationDocument作为唯一参数传入。

Dim document As PresentationDocument = PresentationDocument.Open(templateFilePath, True)
Dim validator As OpenXmlValidator = New OpenXmlValidator()
Dim errors = validator.Validate(document)

For Each errInfo As ValidationErrorInfo In errors
    Debug.Print("Error: """ & errInfo .Description & """")
    Debug.Print("XPath: " & errInfo .Path.XPath)
Next

Validate()返回一个填充了ValidationErrorInfo实例的数组。几乎所有这些都在调试时给出相同的错误描述:

The 'smtClean' attribute is not declared.

每个错误的XPath如下所示(数字不同;每段文本似乎有一个错误):

/p:sldLayout[1]/p:cSld[1]/p:spTree[1]/p:sp[4]/p:txBody[1]/a:p[1]/a:fld[1]/a:rPr[1]

每个TableCell都有一个Paragraph,子元素Run,此Run包含子元素RunProperties和Text。我修改了脚本中的文本,但我没有触及任何其他内容。

搜索' smtClean'给了我一个RunProperties的MSDN条目,显示了&smttClean'作为要设置的可能值之一,但如果我创建了一个新的DocumentFormat.OpenXml.Presentation.Drawing.RunProperties实例,那么' smtClean'属性不可用。

环顾四周,我发现人们提到合并文档的线程是一个可能的原因,但这些错误甚至发生在未经修改的演示文稿中,只有一个幻灯片和表格。使用Open XML SDK 2.5 Productivity Tool验证基础文档,我得到了相同的结果。

无论我要求Validator测试哪种格式,都会出现错误 - 2007年,2010年和2013年版本的PowerPoint格式都会返回相同数量的错误。

最后:文件本身在PowerPoint中运行得很好,即使在修改之后也是如此。我很好奇验证器为什么会返回这么多错误。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我们处理Office文档并在没有副作用的所有类型(Word,Powerpoint,Excel)中删除此属性。 Eric White已将此识别为Bug:smtpClean attribute not supported 它已在Branch Office2016上的当前OpenXml SDK中修复:https://github.com/OfficeDev/Open-XML-SDK/tree/Office2016

...问候

答案 1 :(得分:0)

在Office 2010中不推荐使用智能标记,SDK v2.5验证程序不支持智能标记元素,因此将其标记为无效。

有关详细信息,请参阅this MSDN article

生产力工具的当前开发人员在this thread中说smtClean验证错误在某些情况下是一个错误,并已在工具的第3版中修复。

(Office 2016生产力工具)可以找到here,但我不确定它与旧版Office的兼容性。