在很多业务场景中需要在词文档中嵌入报表。比如下图这个报告:
这是一个某大学年度毕业生就业报告,其中表格和统计图的数据来自数据库,如果通过报表工具,制作这样的表格和统计图是轻而易举的事情,但如果要把这些报表和统计图做到词报告里就麻烦很多。以往有两个办法:一个是每次做好报表和统计图之后,导出为词,再手工复制粘贴到词报告中;第二个是把整个报告都做成一个报表模板,然后再一起导出为词。方法一,纯手工操作效率低;方法二,报表工具排版能力有限,生成的字版面效果不够完美。
那么,还有什么好办法呢?
通常这类报告都有规定的模板样式,只是要定期替换里面的个别信息,比如上图所示的文档编号,报告时间,标题里的年度,图片,每个章节下的报表和统计图,这些信息是动态变化的,而其他文字描述部分以及整体样式都是固定不变的,所以,如果能把报表嵌入词文档做成流水线式的自动化过程,那就是一件两全其美,事半功倍的事情。
润乾报表就提供了把报表嵌入词的功能,实现步骤如下:
1,制作词模板,将需要插入内容的位置设置好书签
比如我们开篇看到的大学毕业生就业报告,我们可以先做成如上图所示的词模板,图示绿色线框位置就是需要定期更新的部分,预先在这些位置插入书签(比如书签名为:编号,时间,标志,年度,报表,统计图),以此标记要插入到词的内容对应插入到什么位置。
2,制作报表,这一步就不详述了。
3、调用润乾报表的raqsoft.report.view.oxml.word。DocxChanger里的方法,将图片,文本,报表等内容插入到指定书签位置,生成新单词的报告。
,如:
<代码>//设置报表授权文件文件警察=新文件(“c:/tmp/report5.lic");> 代码
<代码> FileInputStream lis=new FileInputStream(警察);> 代码
<代码> 序列。readLicense(序列。P_RPT, lis);> 代码
<代码> 文件f=新文件(“E:/test.docx");,,,,,,,,,,,,,,//模板文件=新文件(“D:/out.docx");,,,,,,,,,,,,//输出文件……> 代码
<代码> FileOutputStream安全系数=new FileOutputStream(的);> 代码
<代码> DocxChanger dc=new DocxChanger (f,安全系数);//实例化DocxChanger//在书签“编”号、“时间”、“年度”处插入文字dc.insertText(“编号“,“12345678“);> 代码
<代码> dc.insertText(“时间“,“20170730“);> 代码
<代码> dc.insertText(“年度“,“2017“);//在书签“标志”处插入图片文件文件f1=新文件(“d:/logo.png");dc.insertImage (“logo", f1);//在书签报“表”、“统计图”处插入报表和统计图文件f2=新文件(“d:/毕业去向.rpx");FileInputStream fis=new FileInputStream (f2);> 代码
<代码> “报告=ReportUtils.read (fis);> 代码
<代码> fis.close ();> 代码
<代码> 上下文语境=new上下文();,,> 代码
<代码> 发动机引擎=新引擎((ReportDefine)报告,上下文);> 代码
<代码> 报告=engine.calc ();dc.insertReport(“报表“,报告);> 代码
<代码> 文件f3=新文件(“d:/留学.rpx");> 代码
<代码> FileInputStream fis2=new FileInputStream (f3);> 代码
<代码> IReport report2=ReportUtils.read (fis2);> 代码
<代码> fis2.close ();> 代码
<代码> 上下文context2=new上下文();,> 代码
<代码> 引擎engine2=新引擎((ReportDefine) report2 context2);> 代码
<代码> report2=engine2.calc ();> 代码
<代码> dc.insertReport(“统计图“,report2);//执行所有修改动作,然后关闭输出文件流>