如何使用MySQL数据库中的数据提供Word 2010(.docx)文档/模板?

时间:2012-09-05 16:12:10

标签: docx mailmerge

将.docx文档(Word 2010)中的占位符替换为来自MySQL数据库的数据的最佳方法是什么?

我可以使用服务器端语言打开文件,并为每个占位符执行字符串替换吗?

是否有现有的工具/库?

由于

9 个答案:

答案 0 :(得分:3)

**披露:我领导docx4j项目**

现有大量现有工具/库!

是的,您可以只进行字符串替换,但这是一种脆弱的方法,因为Word可能会在运行时拆分字符串。

您可以使用MERGEFIELD或内容控制数据绑定。

docx4j支持所有这三种方法,但内容控制数据绑定是最强大的。

要特别考虑的是“重复”。如果你想在Word中说一行表,对于MySQL表中的每个匹配行,那么你需要一种方法来实现这一点。

docx4j在表格行周围进行“重复”内容控制;无论你选择哪种解决方案,我都会事先确定它可以处理重复。

答案 1 :(得分:3)

披露:我为Invantive工作。

使用Invantive Composition(http://www.invantive.com/products/invantive-composition),您可以使用来自数据库(IBM DB2,Oracle,MySQL,Teradata和SQL Server)的数据填充Word文档(字母,法律诉状,保险政策),然后完全更改内容随意手动。它适用于通过中央Web服务和带有查询的模型访问数据库的真正Microsoft Word最终用户(包括制作模板的人和使用它的人)。 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好。

答案 2 :(得分:2)

如果您想使用PHP,最完整​​的可用解决方案是PHPDocX

您可以在教程中查看如何使用来自任何数据源(如MySQL DB)的数据替换占位符变量。

特别是,您可以使用无限数量的条目填充表行,并且可以根据提供给应用程序的数据或构建动态Word图表来删除Word文档的整个块。

您可以查看可用的DEMO以获得一个简单但非常具有说明性的示例(其内部工作原理在教程部分中进行了解释)。

答案 3 :(得分:1)

您可以使用开放式Open XML SDK并替换占位符,例如this

答案 4 :(得分:1)

披露:我领导docxgenjs项目

我认为您不应该自己编写所有代码,这就是我为docx创建 Mustache-like 模板引擎的原因

演示:

http://javascript-ninja.fr/docxgenjs/examples/demo.html

回购

https://github.com/edi9999/docxgenjs

它是基于JS的,可以在客户端和服务器端工作。

答案 5 :(得分:0)

是的,您可以使用服务器端语言来执行此操作。 检查apache POI。

http://poi.apache.org

答案 6 :(得分:0)

你好我读了上面的esp评论和Ivantive看起来令人印象深刻 - 但我需要的解决方案要简单得多。使用Word中的Selection.Range.InsertDatabase从访问数据库或Excel电子表格甚至只是另一个Word文档中获取记录。使用访问解决方案,您可以选择要获取的记录布局,并根据字段(例如ID)获取特定记录。谷歌上面的话,它将带你到MS指导和示例VB脚本。在几分钟内工作得很好。现在正在寻找VB脚本,询问人们他们想从dbase获得什么ID,我们已经完成了。

答案 7 :(得分:0)

它使用带有java对象的合并字段的docx模板(对象具有从mysql或任何其他源加载的信息)。 xdoc报告是java语言的项目,项目的主页是https://code.google.com/p/xdocreport/

答案 8 :(得分:0)

*披露:我创建了templ4docx项目*

您好

您可以使用templ4docx java库,它位于maven中央存储库中,因此您只需将其添加到您的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/