我们当前的工作项目涉及打开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中运行得很好,即使在修改之后也是如此。我很好奇验证器为什么会返回这么多错误。
提前感谢您的帮助。
答案 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的兼容性。