我目前正在尝试使用OpenXml进行一些新的操作,但最近我遇到了一些麻烦。正如标题所说我试图使用Xml动态地将数据插入表中。为了识别我的Worddoc中的表格,我已经在它周围放置了一个富文本内容控件。
一切顺利&看起来很好,直到我试图在我的文档中搜索富文本内容控件的标记名。在运行我的代码时,我不断收到“对象引用未设置为对象的实例。”。
他是发生这种情况的路线:
SdtBlock ccWithTable = mainPart.Document.Body.Descendants<SdtBlock>().Where(r => r.SdtProperties.GetFirstChild<Tag>().Val == t.Name).Single();
我已经使用以下MSDN文档尝试实现我的目标,但没有成功:
Inserting Repeating Data Items into a Word 2007 Table by Using the Open Xml API
如果有人能帮助我,我会爱你很久。
答案 0 :(得分:2)
好的,我已经创建了一个实际上工作得更好的workarround。
首先,我从文档中检索所有表格。
List<Table> tables = mainPart.Document.Body.Descendants<Table>().ToList();
然后我检查SdtBlock的tag-parameter,它是我的Table的父级,看看它们是否匹配。
for (int f = 0; f < tables.Count; f++)
{
// If a table is found in the correct Content Control, fill it up with the data
if (tables.ElementAt(f).Parent.Parent.GetFirstChild<SdtProperties>().GetFirstChild<Tag>().Val == t.Name)
{ //the rest of your code...
t.Name是我想要查找的内容的标记。
我实际上对此结果非常满意,因为这解决了无法填充几个相同表格(在同一文档中,具有相同标签)的事实。
小旁注:如果文档中的其他表格不是动态的,最好尝试捕获if。
tables.ElementAt(f).Parent.Parent.GetFirstChild<SdtProperties>().GetFirstChild<Tag>().Val
会杀了那些。