- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
elements are required before every "-6ren"> elements are required before every "-我创建了一个 Word 模板,然后我通过 OpenXML SDK 对其进行处理,以将文档的某些内容替换为来自数据库查询的数据。 模板由一些基本文本组成,在我想要替换文本的地方注入(inject)了纯文-6ren">
elements are required before every "
我创建了一个 Word 模板,然后我通过 OpenXML SDK 对其进行处理,以将文档的某些内容替换为来自数据库查询的数据。
模板由一些基本文本组成,在我想要替换文本的地方注入(inject)了纯文本内容控件。然后,我将这些控件中的文本用作查找替换值的键。在大多数情况下,这工作正常(我只是更新了 Text 对象的 Text 属性)。
在一种情况下,我用表格替换了文本。在这种情况下,我在代码中构建了一个表,然后用新的 Table 对象替换 SdtContentRun 对象(Run 对象的父对象,而后者又是 Text 对象的父对象)的内容...
var sdtContentRunElements =
from sdtContentRun in this.Document.MainDocumentPart.RootElement.Descendants<SdtContentRun>()
select sdtContentRun;
sdtContentRunElements.ForEach(sdtContentRunElement => {
Run firstRunElement = sdtContentRunElement.Descendants<Run>().FirstOrDefault();
if (firstRunElement != null) {
Text firstTextElement = firstRunElement.Descendants<Text>().FirstOrDefault();
if (firstTextElement != null) {
switch (firstTextElement.Text) {
case TableBookmark:
Table advisoryTable = new Table(...); // See below
OpenXmlElement parent = firstRunElement.Parent;
parent.RemoveAllChildren();
parent.Append(advisoryTable);
break;
case ContractorItemAdvisoriesLetter.ContractorCodeBookmark:
firstTextElement.Text = @"New text";
break;
}
}
}
}
这会产生以下 XML(取自 Open XML SDK 2.0 Microsoft Office Productivity Tool)...
<w:sdtContent xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:tbl>
<w:tr>
<w:tc>
<w:p>
<w:r>
<w:t>Lorem ipsum dolor sit amet</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</w:tbl>
</w:sdtContent>
(表格的一些内容已被删除,因为我觉得这只会使问题变得模糊不清)
然后,当我尝试在 Word 中打开该文档时,出现错误。报告的错误是...
Ambuguous cell mapping encountered. Possible missing paragraph element. <p> elements are required before every </tc>
可能值得一提的是,当我在 Open XML SDK 2.0 Productivity Tool for Microsoft Office 中查看文档资源管理器时,w:tbl 元素(以及其中包含的所有元素)被识别为 OpenXmlUnknownElement
而不是被识别为 Table
对象。我不知道这是否相关,或者它是否是 SDK 工具的一个怪癖。
显然我遗漏了一些东西。据我所知 Table class definition ,将 w:tbl 放在 w:sdtContent 中是完全合法的(除非我读错了)所以我现在不知道问题是什么。如果您用谷歌搜索“Table”和“OpenXmlUnknownElement”,结果也很少,而且没有任何结果与我的问题相关。
有什么建议吗?
编辑:进一步的调查似乎表明问题实际上在于将另一个表格嵌入到上面添加的表格的一个单元格中。新的 Table 对象被直接添加到 TableCell 对象中,根据上面引用的 Table 文档,该对象应该是可以接受的...
Table advisoryTable = new Table();
advisories.ForEach(advisory => {
advisoryTable.Append(new TableRow(new TableCell(new Paragraph(new Run(new Text(advisory.NoteText))))));
advisory.ItemAdvisories.ForEach(itemAdvisory => {
Item item = itemAdvisory.Item;
Table itemTable = new Table();
itemTable.Append(new TableRow[] {
new TableRow(new TableCell[] {
new TableCell(new Paragraph(new Run(new Text(string.Format(@"Item {0}", item.Sequence)))))
})
});
advisoryTable.Append(new TableRow(new TableCell(itemTable)));
});
});
导致...
<w:tbl xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:tr>
<w:tc>
<w:p>
<w:r>
<w:t>Lorem ipsum dolor sit amet</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr>
<w:tc>
<w:tbl>
<w:tr>
<w:tc>
<w:p>
<w:r>
<w:t>Item 1</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</w:tbl>
</w:tc>
</w:tr>
</w:tbl>
我曾尝试在 TableCell 和嵌入的表格之间添加一个段落,但这只会导致新的错误,这次是“未指定的错误”。
最佳答案
排序。原始错误消息再清楚不过了!
表格单元格的最后一个子单元格必须是一个段落。在嵌入表格后简单地添加一个空段落解决了问题......
advisoryTable.Append(new TableRow(new TableCell(itemTable, new Paragraph())));
我最终发现了这一点,方法是在 Word-2010 中创建一个由表中表组成的文档,然后在上面使用的相同 Open XML SDK 2.0 Productivity Tool for Microsoft Office 工具中查看生成的 XML。
关于c# - OpenXml 表错误 "<p> elements are required before every </tc>",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8298785/
我的 C# 应用程序使用 OpenXML 创建一个 MSWord 文档,其中已经包含多个表。最后一部分是添加条形图。我找不到这个案例的好例子。 谢谢你的帮助! 我正在从头开始创建文档。从...开始:
我正在使用一个模板文档,该文档使用 CustomXmlBlocks 作为占位符来放置表格和其他信息。我需要能够以某种方式将图像放入其中一个 block 中......即使它首先放入运行中。 图像以字节
我正在以编程方式将 OpenXML 段落添加到 Word 文档中,并且稍后我需要能够将该段落识别为我的段落。关于如何做到这一点有什么想法吗?我尝试插入 XML 注释和扩展属性,但是当您将文档保存在 w
我想使用 openxml 删除一列,我能够清除单元格的内容,但一直无法找到删除列的文档,以便在删除列时向左移动其他单元格。如何使用 openxml 删除列,它将单元格向左移动? 最佳答案 我发现 Op
我找不到任何可以告诉我 txBody 标签中的文本是否带有项目符号的指标,您能否请我确定我应该使用哪个指标来了解文本是项目符号还是普通文本? -谢谢 最佳答案 在 txBody 标签内,您可以查找标签
我目前正在尝试使用 PHPWord 库及其模板系统来处理 docx 文件。我已经找到并更新了这个库的某人(不记得名字,但它并不重要)的路径,该库可以使用表(复制其行,然后在每一行上使用 PHPWord
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Open Xml and Date format in Excel cell 我正在尝试从 DataGridView
我发现各种元素非常困惑。几乎每个元素似乎都有一个与之关联的“部分”,我不确定它们是如何粘合在一起的。 工作簿工作簿部分工作表工作表部分 我也对 DocumentFormat.OpenXml.Packa
我有一个存储在 Bitmap 对象中的图像,我想将其粘贴到 OpenXML 文档中。我尝试使用 MemoryStream 作为中间步骤,如下所示: ImagePart part = container
我试图理解 OpenXML 电子表格的内部文件内容。在一些文件中,我发现了这个字符串。其他标签具有相同的前缀。标签也可以有前缀 p: w: 等。 你能帮我理解这些前缀在标签中的含义吗? 最佳答案 您可
我的预期结果是: 你好 世界! 但是当我使用以下代码时: MainDocumentPart mainDocumentPart = package.AddMainDo
我需要将多个 .docx 文件收集到一个文件夹中,并将它们“链接”成一个将显示给用户的文档。 现在我已经阅读了 Brian Jones' article虽然听起来很有希望,但我遇到了一个问题。 当我使
我正在使用 OpenXml 生成 Excel 文件,在研究了大量不同的示例代码和 SDK Productivity Tool 后,终于得到了我想要的东西。只有一件事我无法回避。当我使用 Excel 打
我正在使用 openxml 创建 WordProcessingDocuments(工作正常,生成的 word 文档正是我想要的),现在我正在尝试使用 openxml Powertools 将这些新创建
我使用 OpenXML SDK 2.5 编写了一个 Word 文档,当我在 MS Office 中预览该文档时,该文档给出了预期的外观和格式。 现在我需要将此文档转换为 HTML 文档,我开始了解 O
我是 .net 编码员,我对 ColdFusion 真的很陌生。我编写了一个自动生成发票的 .dll 库。我需要使用 ColdFusion 应用程序中的库。我已经成功地将我的库中的类加载为 coldf
以前我发布了一个问题,如何将数据集中的数据填充到 excel 工作表中,而不是如何使用该数据创建图表。那篇文章不太走运,但现在我设法从数据集中填充数据,但也在努力根据该数据创建图表,我希望图表与我的数
快要被这个问题搞疯了。我确信它是如此简单,我只是错过了它,但我一生都无法找出如何使用 C# 中的 OpenXml SDK v2.0 更改 Word 2007 中的内容控件的内容。 我创建了一个带有纯文
我正在编写一个小应用程序,它将路径作为输入,然后获取该路径中的每个 docx 文件,用关键字替换每个超链接。 奇怪的是,我发现了两种超链接,第一种来自 WordprocessingDocument E
我有一段文字想在文档的中央出现。如何在docx4j中执行此操作?我目前正在使用: PPr paragraphProperties = factory.createPPr(); //cr
我是一名优秀的程序员,十分优秀!