我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎样自动把报表插入到 word 文档中

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎样自动把报表插入到 word 文档中

在很多业务场景中需要在 word 文档中嵌入报表。比如下图这个报告:

怎样自动把报表插入到 word 文档中

这是一个某大学年度毕业生就业报告,其中表格和统计图的数据来自数据库,如果通过报表工具,制作这样的表格和统计图是轻而易举的事情,但如果要把这些报表和统计图做到 word 报告里就麻烦很多。以往有两个办法:一个是每次做好报表和统计图之后,导出为 word,再手工复制粘贴到 word 报告中;第二个是把整个报告都做成一个报表模板,然后再一起导出为 word。 方法一,纯手工操作效率低;方法二,报表工具排版能力有限,生成的 word 版面效果不够完美。

那么,还有什么好办法呢?

通常这类报告都有规定的模板样式,只是要定期替换里面的个别信息,比如上图所示的文档编号,报告时间,标题里的年度,图片,每个章节下的报表和统计图,这些信息是动态变化的,而其他文字描述部分以及整体样式都是固定不变的。所以,如果能把报表嵌入 word 文档做成流水线式的自动化过程,那就是一件两全其美,事半功倍的事情。

润乾报表就提供了把报表嵌入 word 的功能,实现步骤如下:

1、制作 word 模板,将需要插入内容的位置设置好书签

怎样自动把报表插入到 word 文档中

比如我们开篇看到的大学毕业生就业报告,我们可以先做成如上图所示的 word 模板,图示绿色线框位置就是需要定期更新的部分,预先在这些位置插入书签(比如书签名为:编号,时间,logo,年度,报表,统计图),以此标记要插入到 word 的内容对应插入到什么位置。

2、制作报表,这一步就不详述了。

3、调用润乾报表的 raqsoft.report.view.oxml.word.DocxChanger 里的方法,将图片,文本,报表等内容插入到指定书签位置,生成新的 word 报告。

 eg:

//设置报表授权文件 File flic = new File("c:/tmp/report5.lic");

FileInputStream lis = new FileInputStream(flic);

Sequence.readLicense( Sequence.P_RPT, lis);

File f = new File("E:/test.docx");               //模板文件 File of = new File("D:/out.docx");             //输出文件 … …

FileOutputStream fos = new FileOutputStream(of);

DocxChanger dc = new DocxChanger(f, fos); //实例化DocxChanger //在书签“编号”,“时间”,“年度”处插入文字 dc.insertText("编号", "12345678");

dc.insertText("时间", "20170730");

dc.insertText("年度", "2017"); //在书签“logo”处插入图片文件 File f1 = new File("d:/logo.png"); dc.insertImage("logo", f1); //在书签“报表”,“统计图”处插入报表和统计图 File f2 = new File("d:/毕业去向.rpx"); FileInputStream fis = new FileInputStream(f2);

IReport report = ReportUtils.read(fis);

fis.close();

Context context = new Context();  

Engine engine = new Engine((ReportDefine) report, context);

report = engine.calc(); dc.insertReport("报表", report);

File f3 = new File("d:/留学.rpx");

FileInputStream fis2 = new FileInputStream(f3);

IReport report2 = ReportUtils.read(fis2);

fis2.close();

Context context2 = new Context(); 

Engine engine2 = new Engine((ReportDefine) report2, context2);

report2 = engine2.calc();

dc.insertReport("统计图", report2); //执行所有修改动作,然后关闭输出文件流

dc.execute();

fos.close();

至此,word 报告就自动生成了,以后每次只要执行一遍这段程序就行了,是不是方便了不少?

不过,这个办法还有个缺点,当插入内容变化时,我们就需要修改 java 代码,而改了代码之后又得重编译部署,难以做到热切换。这个办法还是不够方便。

为此,润乾报表还提供了外部配置的方法来实现 word 报表,可以预先编辑一个 xml 文件,在里面写个需要替代的书签等内容,然后程序会读取这个配置文件生成相应的 word 文档。

这样,当插入内容变化的时候,只要修改 xml 配置信息即可,而不用修改代码再编译了。我们一起来看一下:

1、编辑配置文件 xml

该文件中可配置多个书签和插入对象,当对象来源于内存时,可配置成 map,通过 key 从内存中取值,key 值可以是 IReport、byte[]、Image、String,值的类型程序会自动判断。

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<!-- file表示模板docx文件名,可配置绝对路径或相对路径(web端配置时相对于raqsoftConfig.xml中的reportFileHome) --> <docx file="D:/test.doc">

<!-- name表示docx书签,为空则不会插入。 file表示图片文件名,可配置绝对路径或相对路径(web端配置时相对于raqsoftConfig.xml中的reportFileHome) -->

<bookmark name="logo" type="image" file="D:/logo.png"/>

<!-- name表示docx书签, text要插入的文本文字 -->

<bookmark name="编号" type="text" text="12345678"/>

<bookmark name="时间" type="text" text="20170730"/>

<bookmark name="年度" type="text" text="2017"/>

<!-- key表示给定map中的key(未填时跟name相同,对应的value只能是IReport、byte\[\]、Image、String) -->

<bookmark name="统计图" type="map" key="f"/>

<!-- reportFile表示报表模板文件名,可配置绝对路径或相对路径(web端配置时相对于raqsoftConfig.xml中的reportFileHome) -->

<bookmark name="报表" type="report" reportFile="D:/毕业去向.rpx">

<!-- value表示报表参数值(串) -->

<reportParam name="arg1" type="value" value="设定参数1"/>

<!-- type为map时会从内存中根据name读取key,key未填写时跟name相同,key=””时会取map中key为空的值 -->

<reportParam name="arg2" type="map"/>   

  </bookmark> </docx>

注:在 web 应用中,如果 web.xml 里配置了 reportServlet,那么程序会自动加载 raqsoftconfig.xml,读取该文件里配置的 reportFileHome,数据源信息,授权文件等信息。

2、根据配置信息生成 Word 文档

try{    File of = new File("D:/out.docx");    FileOutputStream fos = new     FileOutputStream(of);    String xmlConfig = DocxChanger.xmlFile2String("D:/batch.xml");    File f4 = new File("d:/a.rpx");    FileInputStream fis = new FileInputStream(f4);    IReport report = ReportUtils.read(fis);    fis.close();    Context context = new Context();    Engine engine = new Engine((ReportDefine)     report, context);    report = engine.calc();    HashMap map =new HashMap();    map.put("f", report);    map.put("arg2", "2014-12-15 12:00:23");    DocxChanger.insert(map, xmlConfig, fos);    fos.close();}catch(Throwable x) {    x.printStackTrace();}

说了这么多,大家肯定会觉得理想很丰满,现实很骨感,这个功能是很完美,确实可以帮我解决这些个棘手的问题,但是都知道报表工具价格昂贵,再加上这样小奢的功能,岂不是贵上加贵,为此特意买一套昂贵的报表工具,似乎就不划算了,而开源报表里面又没有这个功能。但是你不知道的是,现在报表工具已经低端化了,润乾率先开始了 5000 元 / 套的低价报表了,恰巧这个功能里面有,恰巧你还看到了。


详情链接:http://c.raqsoft.com.cn/article/1533027654063?r=gxy

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎样自动把报表插入到 word 文档中

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎样自动把报表插入到 word 文档中

在很多业务场景中需要在 word 文档中嵌入报表。比如下图这个报告:这是一个某大学年度毕业生就业报告,其中表格和统计图的数据来自数据库,如果通过报表工具,制作这样的表格和统计图是轻而易举的事情,但如果要把这些报表和统计图做到 word 报告
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录