当前位置: 首页 > 编程语言 > C#

OpenXml表格错误“requireselementbeforeeach”分享

时间:2023-04-11 00:38:02 C#

OpenXml表格错误“requireselementbeforeeach”我创建了一个Word模板,然后我通过OpenXMLSDK进行处理,将其替换为数据库中的数据查询文档的一些内容。该模板由一些基本文本组成,在我希望替换文本的位置注入了纯文本内容控件。然后我使用这些控件中的文本作为查找替换值的键。在大多数情况下,这工作正常(我只是更新了Text对象的Text属性)。在一种情况下,我用表格替换文本。在这种情况下,我在代码中构建一个表,然后用新的Table对象替换SdtContentRun对象(Run对象的父对象,而后者又是Text对象的父对象)的内容...varsdtContentRunElements=fromsdtContentRun在此.Document.MainDocumentPart.RootElement.Descendants()中选择sdtContentRun;sdtContentRunElements.ForEach(sdtContentRunElement=>{运行firstRunElement=sdtContentRunElement.Descendants().FirstOrDefault();if(firstRunElement!=null){switch(firstTextElement.Text){caseTableBookmark:TableadvisoryTable=newTable(...);//见下文ContractorCodeBookmark:firstTextElement.Text=@"Newtext";break;}}}}}这导致以下XML(取自OpenXMLSDK2.0MicrosoftOffice生产力工具)...Loremipsumdolorsitamet(其中一些)表已被删除,因为我觉得这只会使问题更容易)当我然后尝试在d中打开文档时,出现错误Thereportederroris...Anambiguouscellmapwasencountered。可能缺少段落元素。Elementsarerequiredbeforeeach值得一提的是,当我在OpenXMLSDK2.0ProductivityToolforMicrosoftOffice中查看DocumentExplorer时,w:tbl元素(以及其中包含的所有元素)被识别为OpenXmlUnknownElement而不是Isrecognizedasa表对象。我不知道这是否相关,或者它是否是SDK工具的一个怪癖。显然我错过了一些东西。据我从Table类定义中可以看出,将aw:tbl放在aw:sdtContent中是完全合法的(除非我读错了)所以我不知道现在的问题是什么。如果您用谷歌搜索“表”和“OpenXmlUnknownElement”,似乎没有任何结果与我的问题相关,而且结果也很少。有什么建议么?编辑:进一步的调查似乎表明问题实际上是在上面添加的表格的一个单元格中嵌入另一个表格。新的Table对象直接添加到TableCell对象,根据上面引用的Table文档,这应该是可以接受的...TableadvisoryTable=newTable();advisory.ForEach(advisory=>{advisoryTable.Append(newTableRow(newTableCell(newParagraph(newRun(newText(advisory.NoteText))))));advisory.ItemAdvisories.ForEach(itemAdvisory=>{Itemitem=itemAdvisory.Item;表itemTable=newTable();itemTable.Append(newTableRow[]{newTableRow(newTableCell[]{newTableCell(newParagraph(newRun(newText(string.Format(@"Item{0}",item.Sequence))))})});advisoryTable.Append(newTableRow(newTableCell(itemTable)));});});结果...LoremipsumdolorsitametItem1我试过了在TableCell和嵌入表格之间添加一个段落,但这只会导致新错误,这次是“未指定错误”。排序。原始错误消息真的再清楚不过了!表格单元格的最后一个子节点必须成为一个段落。只需在嵌入表格后添加一个空段落即可解决问题...advisoryTable.Append(newTableRow(newTableCell(itemTable,newParagraph())));我最终通过在Word-2010中创建一个文档发现了这一点,该文档由表中的表组成,然后在上面使用的相同的OpenXMLSDK2.0ProductivityToolforMicrosoftOffice工具中查看生成的XML。以上就是C#学习教程的全部内容:OpenXmltableerror"eachelementisrequiredbefore",如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: