Java报表工具FineReport导出EXCEL的四种API
在实际的应用中会经常需要将数据导出成excel,导出的方式除原样导出还有分页导出、分页分sheet导出和大数据量导出。对于excel 2003版,由于限制了每个sheet的最大行数和列数,大数据量导出时会默认时分多个sheet,而excel2007不会出现这样的问题。这些导出方式在JAVA程序中分别有不同的接口来实现:
1、原样导出
原样导出就是不预览直接导出excel
其程序接口代码如下:
outputStream = new FileOutputStream(new File("E:\\ExcelExport.xls")); ExcelExporter excel = new ExcelExporter(); //导出2007版 outputStream = new FileOutputStream(new File("E:\\ExcelExport.xlsx")); excel Excel2007Exporter excel = new Excel2007Exporter(); excel.export(outputStream, rworkbook);
效果图:
2、分页导出
分页导出,如果报表模版是分页的,会按照分页的结果形式导出,重复的标题等也会重复。
其程序接口代码如下:
outputStream = new FileOutputStream(new File("E:\\PageExcelExport.xls")); PageExcelExporter page = new PageExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook)); //导出2007版 outputStream = new FileOutputStream(new File("E:\\PageExcelExport.xlsx")); excel PageExcel2007Exporter page = new PageExcel2007Exporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook)); page.export(outputStream, rworkbook);
效果图:
3、分页分sheet导出
分页分Sheet导出时报表结果的每一页为一个Sheet保存在Excel文件中
其代码如下:
outputStream = new FileOutputStream(new File("E:\\PageSheetExcelExport.xls")); PageToSheetExcelExporter sheet = new PageToSheetExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook)); //导出2007版outputStream = new FileOutputStream(new File("E:\\PageSheetExcelExport.xlsx")); excel PageToSheetExcel2007Exporter sheet = new PageToSheetExcel2007Exporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook)); sheet.export(outputStream, rworkbook);
效果图:
4、大数据量导出
这是比较常见的,例如以50000行为一个excel文件
其代码如下:
outputStream = new FileOutputStream(new File("E:\\LargeExcelExport.zip")); LargeDataPageExcelExporter large = new LargeDataPageExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook), true); //导出2007版outputStream = new FileOutputStream(new File("E:\\LargeExcelExport.xlsx")); excel LargeDataPageExcel2007Exporter large = new LargeDataPageExcel2007Exporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook), true); large.export(outputStream, rworkbook);
对于大数据量导出报表时,可能会出现如下两种情况:
一、导出成功,数据会显示在多个Sheet中;
二、导出失败,导出的Excel内容无效。出现如上情况的原因主要有两点:
4.1 没有启用行式引擎的大数据量报表导出
在没有启用行式引擎的情况下,也会出现两种情况:服务器可以承受的情况下导出成功,服务器无法承受的情况下导出失败,下面我们分别看下其结果:
4.1.1 服务器承受范围内
可以承受的范围是:数据量大,超过了EXCEL的最大行数但不是非常非常大,比如10万条,且数据不复杂,在内存足够且网络没有断的情况下可以正常导出。导出时,超出Excel最大行或列的数据会在下一个Sheet中显示。但是Excel的行数和列数是有限制的,如Excel2003其行数最大限制为65536行,列数最大限制为256列。
4.1.2 服务器无法承受
无法承受的范围是主要是数据量大,且非常大,比如几十万几百万甚至更多,可能因为内存等的限制而出现导出失败。而导出的结果时,打开导出失败的Excel,其内容是无效的。
对于这两种导出结果,其主要原因在于数据量与数据复杂程度(列数)究竟有多大,在没有用行引擎的情况下就会有一个临界点,低于临界点的时候可以导出成功即导出的内容有多个sheet,否则导出失败,内容无效。所以,对于大数据量报表,通常使用行式引擎来展现,这种情况下,导出Excel始终成功。在启用行式引擎的大数据量报表导出Excel时,是将其分成多个.xls文件,且是以一个压缩包文件的格式传输到客户端的。
4.2 启用行式引擎的大数据量报表导出
对于大数据量报表,通常使用行式引擎来展现,这种情况下,导出Excel始终成功。因为启用行式引擎的大数据量报表导出Excel时,是将其分成多个.xls文件,且是以一个压缩包文件的格式传输到客户端的。
比如,大数据量报表有100w行数据,设置行式引擎,每页显示30行。导出的结果会是41个Excel,前40个Excel每个24990行,最后一个Excel为400行,41个Excel压缩为zip包传到客户端下载。
Java报表工具FineReport导出EXCEL的四种API的更多相关文章
- .NET导出Excel的四种方法及评测
.NET导出Excel的四种方法及评测 导出Excel是.NET的常见需求,开源社区.市场上,都提供了不少各式各样的Excel操作相关包.本文,我将使用NPOI.EPPlus.OpenXML.Aspo ...
- [转帖].NET导出Excel的四种方法及评测
.NET导出Excel的四种方法及评测 https://www.cnblogs.com/sdflysha/p/20190824-dotnet-excel-compare.html 导出Excel是.N ...
- Java报表工具FineReport常见的数据集报错错误代码和解释
在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释 ...
- Web报表工具FineReport实现EXCEL数据导入自由报表
在制作填报报表的时候.对于空白填报表,经常导出为Excel,派发给各部门人员填写后上交.怎样能避免手动输入,直接将Excel中的数据导入到填报表中提交入库呢? 这里以一个简单的员工信息填报演示样例进行 ...
- java报表工具FineReport的JS编辑框和URL地址栏语法简介
JS编辑框: 1.FineReport的js. 作为一款BS产品,browser端的JavaScript是必不可少的. FineReport中的js是已经调用了finereport.js的. 大家知道 ...
- java报表工具FineReport常用函数的用法总结(文本和日期函数)
文本函数 CHAR CHAR(number):根据指定数字返回对应的字符.CHAR函数可将计算机其他类型的数字代码转换为字符. Number:用于指定字符的数字,介于1Number:用于指定字符的数字 ...
- java报表工具FineReport的SQL编辑框的语法简介
感谢大家捧场,这里继续分享关于SQL编辑框的一些语法心得总结,因为数据集定义的面板,也是FineReport报表中最常用的模块之一. 1.我理解的执行过程. 这里其实是生成一个字符串,FineRepo ...
- java报表工具FineReport的公式编辑框的语法简介
FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式, ...
- java报表工具FineReport使用中遇到的常见报错及解决办法(三)
这里写点抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己. 出现问题先搜一下文档上有没有,再看看度娘有没有,再看看论坛有没有.有报错要看日志.下面简单罗列下常见的问题,大多 ...
随机推荐
- 自己实现简单的AOP(五)使Demo适应webApi、亦可完成属性自动注入
在前文的Demo中,webApi的Controller是不能自动注入的,原因是 IHttpController 和 IController 是通过两个不同的途径进行激活的. IHttpControll ...
- DDL/DML是什么?
DDL:(Data Definition Language)数据库定义语言 它是定义数据库的语言, 里面包含: CREATE ALTER DROP TRUNCATE COMMENT RENAME DM ...
- C#入门经典Lambda
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lamb ...
- Java实现时间动态显示方法汇总
这篇文章主要介绍了Java实现时间动态显示方法汇总,很实用的功能,需要的朋友可以参考下 本文所述实例可以实现Java在界面上动态的显示时间.具体实现方法汇总如下: 1.方法一 用TimerTask: ...
- 更换Kali源让你更新更快
在2016.1版本kali-linux(也就是kali滚动更新版)更新慢解决办法: (此源为2.0版本)中科大kali滚动更新版源(即kali2.0源) #kali官方源 deb http://htt ...
- 容器--TreeMap
一.概述 在Map的实现中,除了我们最常见的KEY值无序的HashMap之外,还有KEY有序的Map,比较常用的有两类,一类是按KEY值的大小有序的Map,这方面的代表是TreeMap,另外一种就保持 ...
- tomcat之一:指定tomcat运行时JDK版本
tomcat作为日常开发的web应用服务器,给开发测试带来了很多便利,tomcat的运行依赖JDK的支持,在安装JDK时经常会配置环境变量:JAVA_HOME.CLASSPAT,且需要添加path变量 ...
- .net 实体类与json转换(.net自带类库实现)
注意要点. 1.jsonhelp编写时候添加的引用.System.Runtime.Serialization.Json; 2.实体类需声明为public jsonhelp代码: using Syste ...
- 走进SVG
什么是SVG?也许现在很多人都听说过SVG的人比较多,但不一定了解什么是SVG:SVG(Scalable Vector Graphics 一大串看不懂的英文)可伸缩矢量图形,它是用XML格式来定义用于 ...
- Googlehack之Github hack
site:aircrk.com smtpsite:aircrk.com smtp @mail.comsite:aircrk.com root passwordsite:aircrk.com smtp ...