【发布时间】:2015-07-16 18:05:09
【问题描述】:
我正在尝试使用 OpenXml 将文本插入到我的 word 文档模板中的内容控件中。首先,我通过标签名称搜索内容控件,然后在 SdtBlock 中添加段落元素,如下所示,
SdtBlock contentBlock = wordDoc.MainDocumentPart.Document.Body.Descendants<SdtBlock>()
.Where(r => r.SdtProperties.GetFirstChild<Tag>().Val == "AssessmentSection")
.Single();
但是当我执行此语句时,我得到“对象引用未设置为对象的实例”。错误信息。模板文档已经有另一个内容控件,我能够使用上面相同的语句找到该控件,只是标记名不同。但是在模板中添加“AssessmentSection”内容控件并运行程序后,“AssessmentSection”控件出现“对象引用...”错误,程序失败。我确信新的内容控件标签名称和标题与其他内容控件是唯一的。
谁能帮助我为什么会出现这种奇怪的行为以及如何解决它???
【问题讨论】:
-
什么是 null?在您的 where 子句中,您有
r.SdtProperties,如果SdtProperties对于集合中的任何元素为空,您将获得空引用。如果有可能,请检查:r => r.SdtProperties != null && r.SdtProperties.GetFirstChild...您可能还需要检查GetFirstChild<Tag>()是否确实为您的所有元素返回了某些内容。如果没有,您也会在那里获得空引用。 -
看看我的answer here - 有帮助吗?
标签: c# openxml contentcontrol