用MySQL数据库中的数据替换.docx文档(Word 2010)中的占位符的最佳方法是什么?
我可以使用服务器端语言打开文件,并对每个占位符进行字符串替换吗?
是否有可用的现有工具/库?
感谢
披露:我为Invantive工作。
使用佐剂组合物(http://www.invantive.com/products/invantive-composition)您可以用数据库(IBMDB2、Oracle、MySQL、Teradata和SQLServer)中的数据填充Word文档(信件、法律诉状、保险单),然后手动完全更改内容。它是为真正的Microsoft Word最终用户(包括制作模板的人和使用模板的人)设计的,他们通过中央Web服务和带有查询的模型访问数据库。Invantive Composition允许嵌套重复的数据组和布局。使用单击一次集成到Microsoft Word中。
过去,我个人也一直在使用JasperReports(http://community.jaspersoft.com/project/jasperreports-library)使用JasperReports的RTF输出目标生成信件。它是免费的,只要您不想编辑超过几个单词的输出,并且具有Java/SQL开发技能,它就可以正常工作。正如Invantive Composition一样,它适用于大量不同的报告。
只要你能完全控制环境,你也可以考虑使用RTF作为中间语言(不适用于最终用户,只适用于真正的开发人员)。将文档另存为RTF,替换需要可替换的部分文本,编写一个接受参数的Web服务并转储回生成的RTF。生成更复杂的表需要一些时间(表显然是人类在编写RTF规范后发明的:-)这种方法只适用于数量非常有限的模板,并且当您有足够的开发人员时间来启动、运行和稳定它时。
作为一名独立评审员,我也看到过使用XML模板的情况,但结果不如JasperReports。
**披露:我领导docx4j项目**
有很多现有的工具/库可用!
是的,你可以只做一个字符串替换,但这是一个脆弱的方法,因为Word可能已经将字符串拆分为多个运行。
您可以使用MERGEFIELD或内容控制数据绑定。
docx4j支持这三种方法,但内容控制数据绑定是最强大的。
- ContentControlsMergeXML
- MERGEFIELD
- 变量替换
需要特别考虑的一件事是"重复"。如果你想在Word中为MySQL表中的每一行匹配一行,那么你需要一种方法来实现这一点。
docx4j通过围绕表行的"重复"内容控件来实现这一点;无论你选择哪种解决方案,我都会事先确保它可以处理重复。
如果您想使用PHP,最完整的可用解决方案是PHPDocX。
您可以在教程中查看如何用来自任何数据源(如MySQL DB)的数据替换占位符变量。
特别是,您可以用不确定数量的条目填充表行,也可以根据提供给应用程序的数据删除Word文档的整个块,或者构建动态Word图表。
您可以查看可用的DEMO,以获得一个简单但说明性很强的示例(其内部工作原理在教程部分进行了解释)。
您可以使用开放的open XML SDK并像这样替换占位符。
披露:我领导docxgenjs项目
我认为您不应该自己编写所有代码,这就是为什么我为docx 创建了一个类似Mustache的模板引擎
演示:
http://javascript-ninja.fr/docxgenjs/examples/demo.html
回购
https://github.com/edi9999/docxgenjs
它是基于JS的,在客户端和服务器端工作。
是的,您可以使用服务器端语言来完成。查看apache POI。
http://poi.apache.org
你好,我读了上面的特别是评论,Ivantive看起来很令人印象深刻,但我需要的解决方案要简单得多。在Word中使用Selection.Range.InsertDatabase可以从access数据库或excel电子表格甚至其他Word文档中提取记录。使用访问解决方案,您可以选择要提取的记录的布局,并让它根据字段(例如ID)仅提取特定的记录。用谷歌搜索上面的单词,它将带你了解MS指南和VB脚本的示例。在短短几分钟内工作良好。现在,我们正在寻找一个VB脚本,该脚本询问用户他们想要从数据库中获得什么ID,我们就完成了。
它使用具有与java对象合并字段的docx模板(对象具有从mysql或任何其他源加载的信息)。xdoc报告是一个针对java语言的项目,该项目的主页为https://code.google.com/p/xdocreport/.
*披露:我创建了templ4docx项目*
你好
您可以使用maven中央存储库上的templ4docxjava库,因此您可以将其添加到您的maven依赖项中:
<dependency>
<groupId>pl.jsolve</groupId>
<artifactId>templ4docx</artifactId>
<version>2.0.0</version>
</dependency>
示例用法:
Docx docx = new Docx("E:\template.docx");
Variables variables = new Variables();
variables.addTextVariable(new TextVariable("${firstName}", "John"));
variables.addTextVariable(new TextVariable("${lastName}", "Sky"));
docx.fillTemplate(variables);
docx.save("E:\filledTemplate.docx");
您可以在此处找到更多详细信息:http://jsolve.github.io/java/templ4docx/