java将数据导出excel计算其文件大小

Python09

java将数据导出excel计算其文件大小,第1张

热门频道

首页

博客

研修院

VIP

APP

问答

下载

社区

推荐频道

活动

招聘

专题

打开CSDN APP

Copyright © 1999-2020, CSDN.NET, All Rights Reserved

打开APP

数据导出excel大小限制_java 导出Excel 大数据量,自己经验总结! 原创

2020-12-19 01:58:16

weixin_39655377

码龄5年

关注

分析导出实现代码,XLSX支持:

/*** 生成XLSX,2007版本的excel,每个sheet无6.5W的行数限制,但是到了一定数量,可能内存溢出,

* 次方法适合在预计10W以下的数据导出时使用,本机测试,14W可以导出。列数量在8列左右

*

*@paramfileOut

* 输出流

*@paramsheetMap

* 要设置的数据信息

*@throwsSQLException*/

public static voidcreateXSLXByResultSet(OutputStream fileOut, WriteXLSBean... beans)throwsSQLException {try{//重点 Workbook

Workbook wb = newXSSFWorkbook()for (int i = 0, len = beans.lengthi <leni++) {

WriteXLSBean xlsBean=beans[i]

Sheet sheet=wb.createSheet(xlsBean.getSheetName())

ResultSet rs=xlsBean.getRs()

ResultSetMetaData rsmd=rs.getMetaData()

TypeHandlerRegistry tr=BeanContext.tr

Map th =xlsBean.getTh()int index = 0while(rs.next()) {long t1 =System.currentTimeMillis()

org.apache.poi.ss.usermodel.Row row=sheet

.createRow(index)for (int j = 0, numberOfColumns = rsmd.getColumnCount()j <numberOfColumnsj++) {

String key= rsmd.getColumnLabel(j + 1).toLowerCase()if(th.containsKey(key)) {

TypeHandler>type =tr.getTypeHandler(JdbcType

.forCode(rsmd.getColumnType(j+ 1)))

Object obj=type.getResult(rs, key)

row.createCell(j).setCellValue(obj== null ? "": obj.toString())

}

}

System.out.println(index+ " :"

+ (System.currentTimeMillis() -t1))

index++

}

}//重点 Workbook

wb.write(fileOut)

}catch(IOException e) {

e.printStackTrace()throw new ServiceRunTimeException("生产xls文档错误", e)

}finally{

}

}

在上面 标注了重点的两处,分别是:

1.构建一个Excel对象

2.将该对象写入一个OutPutStream

而在构建过程中,没有地方写入OutPutSteam ,也就是说必须在内存中构建整个 Excel,才能进行写出操作,在大数据量情况下,这样将导致所有数据加载到内存中,而不能输出,导致最后 内存溢出。

根据运行环境不用,可能内存溢出的 情况不同

根据情况,如果数据量达到10W以上,建议使用

1、多个Excel,每个Excel一个Sheet,因为所有Sheet都是Workbook的组成部分。如果不分多个Excel,即使分Sheet也没用,

2、每个Excel中列数适中,比如: 5W行每个Excel档,实现分多次导出和分页查询原理一样

3、对多个Excel导出到一个临时目录,并通过程序压缩,然后提供给客户下载

2003版通过数据库结果存到List中,然后进行生产:Table 就是List Row 是Map

/*** 生产xls,2003版本的excel,每个sheet有6.5W的行数限制

*

*@paramfileOut

* 输出流,未关闭

*@paramsheetMap

* 要导出的数据信息*/

public static void createXSLByMap(OutputStream fileOut, Map>>sheetMap) {try{

HSSFWorkbook wb= newHSSFWorkbook()

Set keys =sheetMap.keySet()for (Iterator iterator =keys.iterator()iterator

.hasNext()) {

String SheetKey=iterator.next()

Sheet sheet=wb.createSheet(SheetKey)

List>sheetRows =sheetMap.get(SheetKey)for (int i = 0, len = sheetRows.size()i <leni++) {

Map cellMap =sheetRows.get(i)

Set cellSet =cellMap.keySet()

org.apache.poi.ss.usermodel.Row row=sheet.createRow(i)int j = 0for (Iterator iterCell =cellSet.iterator()iterCell

.hasNext()j++) {

String cellKey=iterCell.next()

Object obj=cellMap.get(cellKey)

row.createCell(j).setCellValue(obj== null ? "": obj.toString())

}

}

}

wb.write(fileOut)

}catch(IOException e) {

e.printStackTrace()throw new ServiceRunTimeException("生产xls文档错误", e)

}finally{

}

}

新版本 POI+office 2007版本excel可以导出几十万条而不内存溢出,详细见:

导出大量数据到 excel 的 xlsx文件

static String src="abcdefafslfelgtryjukjhgfdadertjDSFGHJKJGHFERTUIOabcdefafslfelgtryjukjhgfdadertjDSFGHJKdertjDSFGHJKJGHFERTUIOabcdefafslfelgtryjukjhgfdadertjDSFGHJKJGHFERTUIO"

public static void main(String[] args) throwsThrowable {

SXSSFWorkbook wb = new SXSSFWorkbook(100)//这里100是在内存中的数量,如果大于此数量时,会写到硬盘,以避免在内存导致内存溢出

Sheet sh =wb.createSheet()

for (int rownum = 0rownum <1000000rownum++) {

Row row =sh.createRow(rownum)

for (int cellnum = 0cellnum <10cellnum++) {

Cell cell =row.createCell(cellnum)

String address = newCellReference(cell).formatAsString()

cell.setCellValue(address+src.substring(rownum%10*10+1, (rownum%10+1)*10))

}

}

File file = new File("F:/aa.xlsx")

file.createNewFile()

FileOutputStream out = newFileOutputStream(file)

wb.write(out)

out.close()

}

内存使用情况:

根据以上前辈经验,自己在结果自身需求考虑,整合出一个工具。解决了excle表.xls格式行数65535行的限制。我实现的形式是导出一张表,里面有多页

(我是已65000为一页)

这里是用反射来使用所有传入进行的实体的属性的值。这里只针对String和基本数据类型。如有自己定义的类型需要自己加上。

packagecom.tommy.fundation.utilimportjava.lang.reflect.Fieldimportjava.lang.reflect.InvocationTargetExceptionimportjava.lang.reflect.Methodimportjava.util.ArrayListimportjava.util.Dateimportjava.util.Listpublic classRelectUtil {public static List reflectEntity(T model,Class>cals) throwsNoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, NoSuchFieldException{

List list = new ArrayList()

Field[] field= model.getClass().getDeclaredFields()//获取实体类的所有属性,返回Field数组

for(int j=0 j

String nam = field[j].getName()//获取属性的名字

String name =nam

name= name.substring(0,1).toUpperCase()+name.substring(1)

String type= field[j].getGenericType().toString()//获取属性的类型

if(type.equals("class java.lang.String")){ //如果type是类类型,则前面包含"class ",后面跟类名

Method m = model.getClass().getMethod("get"+name)

String value= (String) m.invoke(model)//调用getter方法获取属性值

if(value != null){

list.add(value)

}else{

list.add("")

}

}if(type.equals("class java.lang.Integer")){

Method m= model.getClass().getMethod("get"+name)

Integer value=(Integer) m.invoke(model)if(value != null){

list.add(value)

}else{

list.add("")

}

}if(type.equals("class java.lang.Short")){

Method m= model.getClass().getMethod("get"+name)

Short value=(Short) m.invoke(model)if(value != null){

list.add(value)

}else{

list.add("")

}

}if(type.equals("class java.lang.Double")){

Method m= model.getClass().getMethod("get"+name)

Double value=(Double) m.invoke(model)if(value != null){

list.add(value)

}else{

list.add("")

}

}if(type.equals("class java.lang.Boolean")){

Method m= model.getClass().getMethod("get"+name)

Boolean value=(Boolean) m.invoke(model)if(value != null){

list.add(value)

}else{

list.add("")

}

}if(type.equals("class java.util.Date")){

Method m= model.getClass().getMethod("get"+name)

Date value=(Date) m.invoke(model)if(value != null){

list.add(value)

}else{

list.add("")

}

}

}returnlist

}

}

下面将是重点实现导出excel表

packagecom.tommy.fundation.utilimportjava.io.OutputStreamimportjava.util.ArrayListimportjava.util.Dateimportjava.util.HashMapimportjava.util.Iteratorimportjava.util.Listimportjava.util.Mapimportjava.util.Setimportjavax.servlet.http.HttpServletResponseimportorg.apache.poi.hssf.record.formula.functions.Timportorg.apache.poi.hssf.usermodel.HSSFRowimportorg.apache.poi.hssf.usermodel.HSSFSheetimportorg.apache.poi.hssf.usermodel.HSSFWorkbook

@SuppressWarnings("hiding")public class ExportExcel{/*** 导出多张excel表,解决xls格式行数65535的限制

*@authorOnlyOne

*@paramresponse

*@paramlist 需要处理的list数据集合

*@throwsException*/@SuppressWarnings("deprecation")public void doExcel(HttpServletResponse response,List list,String fileName) throwsException {

OutputStream os= response.getOutputStream()//获取输出流

response.reset()//设置下载头部信息。Content-disposition为属性名。attachment表示以附件方式下载,如果要在页面中打开,则改为inline。filename为文件名

response.setHeader("Content-disposition", "attachmentfilename=excell.xls")

response.setContentType("application/msexcel")

Map>sheetMap =daData(list)

HSSFWorkbook wb= newHSSFWorkbook()

Set keys =sheetMap.keySet()for (Iterator iterator =keys.iterator()iterator.hasNext()) {

Integer SheetKey=iterator.next()

HSSFSheet sheet= wb.createSheet((fileName+SheetKey).toString())

List sheetRows =sheetMap.get(SheetKey)for (int i = 0, len = sheetRows.size()i <leni++) {

T en=(T) sheetRows.get(i)

List dataList = RelectUtil.reflectEntity(en, en.getClass())

HSSFRow row=sheet.createRow(i)

row.createCell(0).setCellValue(String.valueOf(i))for(int m=0m

row.createCell(m+1).setCellValue(dataList.get(m).toString())

}

}

}

wb.write(os)

}/*** 此方法将数据集合按65000个进行分割成多个子集合

*@authorOnlyOne

*@paramlist 需要处理的list数据集合

*@return

*/

public Map>daData(Listlist){int count = list.size()/65000int yu = list.size() % 65000

Map>map = new HashMap>()for (int i = 0i <= counti++) {

List subList = new ArrayList()if (i ==count) {

subList= list.subList(i * 65000, 65000 * i +yu)

}else{

subList= list.subList(i * 65000, 65000 * (i + 1)-1)

}

map.put(i, subList)

}returnmap

}

}

在Java中调用的方式

@RequestMapping(value = "/doExcel", method =RequestMethod.GET)public void doExcel(HttpServletResponse response,HttpServletRequest request) throwsException {

List list =enrolltgService.findAll()new ExportExcel().doExcel(response, list, "黑白淡奶")

}

大功搞成,以后再也不会为了数据量太大而导不出来烦恼了!!!

需要的包 poi-3.2-FINAL-20081019.jar

相关资源:poi读取大文件Excel,使用xml格式解析,速度实测50mb文件13s,可指定...

打开CSDN,阅读体验更佳

POI多线程分表导出百万级大数据量EXCEL导出_Zhuo_chao的博客-CSDN博 ...

由上面可知 Excel 2003及以下是无法实现单sheet百万级的数据。 ApachePOI 简介 Apache POI 是用Java编写的免费开源的跨平台的 JavaAPI,Apache POI提供API给Java程式对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式档案读和写的功...

Java 使用POI导出数据到 excel,单 sheet 和多 sheet__修铁路的的博客...

单sheet 和多 sheet,用到的jar都是一样的,无非就是多创建一个 sheet的问题,以下是需要用到的jar包,在对应模块的pom.xml 中引入即可 <dependency><groupId>org.apache.poi</groupId>...

java导出excel超出65533行

业务背景: 列表导出,数据导出超过65533行 解决方案: 1、超出65533行,直接系统提示:本系统支持导出的最大条数为65533行 2、导出模版改为.xlsx,POI导出时用XSSFWorkbook,把所有数据都拿到内存里,可以导出超过65533行,但是上线之后,发现会内存溢出 3、导出模版改为.xlsx,POI导出时用SXSSFWorkbook,每次往内存里放一定的数据,导完之后,刷新,再次...

继续访问

Java的poi导出的excel不能超过256列的解决办法

Java的poi导出的excel不能超过256列的解决办法背景1、现在的情况2、解决办法 背景 1、现在的情况 excel文件名以.xls结尾 这个构造函数中默认采取这个类型 this.type = ExcelType.HSSFpublic ExportParams(String title, String sheetName) { this.color = HSSFColorPredefined.WHITE.getIndex()this.headerColor = HSSFC

继续访问

使用ApachePOI导出excel(多个sheet页)_我是橘子京的博客

2、设置导出excel路径 //导出的文件路径 String filePath="D:\\excel.xls"1 2 3、创建excel文件 //创建Excel文件(Workbook) HSSFWorkbook workbook = new HSSFWorkbook()1 2 4、设置单元格样式 //设置单元格样式 HSSFCel...

POI3.8 导出大数据excel(50万左右)_咖啡加糖_的博客_poi支持最...

import org.apache.poi.ss.usermodel.Sheetimport org.apache.poi.ss.usermodel.Workbookimport org.apache.poi.ss.util.CellReferenceimport org.apache.poi.xssf.streaming.SXSSFWorkbook...

最新发布 【JAVA问题解决方案】01.EasyExcel导出数据超过Excel单表上限解决方案

1.了解一下Excel单表最多存储多少行数据(可以存储1048576条数据,1024的平方,2的20次方)。本文是介绍EasyExcel导出数据超过Excel单表上限解决方案。2.知道最多多少行就能以这个数为条件,如果超过则进行分表。3.分表的同时需要对数据进行分割,才能不超过最大限度。实体类(非常简单,为了导出表更快)

继续访问

java实现流输出形式导出数据(使用EasyExcel)并打包为zip包

java实现流输出形式文件下载并打包为zip包 pom.xml文件导入easyexcel <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.0.5</version></d...

继续访问

...到excel文件(xls格式),附实验结果(单张sheet最多可有65536行)&Fi...

使用POI导出MySQL数据库数据到excel文件(xls格式) 注意事项:单张sheet最多存储65536行!否则报错! Caused by: java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535) !

使用Apache POI导出百万条EXCEL数据_橙乐果果的博客

工作中,有这么一个需求:每天凌晨00:05分定时从数据库导出大于三个月的订单流水信息,保存为excel文件。 Just do it. 1.引入POM依赖 <!-- excel --><!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->...

Linux下读写文件操作

Linux下读写文件操作 #include<stdio.h>typedef struct Student { int nochar name[10]int score}Studentint main(int args,char *argv[]) { //打开文件 FILE *fp=fopen("test.txt","w")if(fp=NULL) { perror("fopen")...

继续访问

Java导出超大Excel文件,防止内存溢出

Java导出超大Excel文件,防止内存溢出1.采用Poi中的SXSSFWorkbook2.maven中引入Poi3.测试过程4.单元测试Java代码5.结论 将业务数据导出到Excel表中,导出任务数据量较大时,导出的项目就会内存溢出,本文通过Java操作Poi的SXSSFWorkbook类进行导出,解决内存溢出问题。 1.采用Poi中的SXSSFWorkbook 在实现excel导出时,在数据量过大的情况下,总是容易发生内存溢出的情况。可以使用POI提供的 SXSSFWorkbook 类来避免内存溢

继续访问

Apache Poi导出Excel多Sheet页详解!_奥鹏马的博客

apache poi是目前比较常用导出excel的方式。最近想要实现一个导出excel多sheet页的功能。 网上查了一下大多都是针对某个具体对象的导出,不能实现任意对象的导出。现在将自己研究出的代码贴出来,供大家参考。 //注意:此处实现的关键是将...

Apache poi 导出多sheet的excel表格_朋态圈的博客

导出多sheet的excel */public class ApachePoi { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub exportExcel()} @SuppressWarnings("resource") public static String exportExcel...

java导出excel限制大小_解决java poi导出excel2003不能超过65536行的问题

/*** 如果达到50000条数据则重新创建工作表的逻辑*/@Overridepublic void exportExcel(ListformList, ServletOutputStream outputStream){try{//工作表名后面的数字,如表1,表2int i = 0//记录总行数int rownum = 0//记录每个sheet的行数int tempnum = 0//分页条...

继续访问

热门推荐 java poi 导出Excel 超大数据量解决方案

http://blog.csdn.net/qiaoshuai0920/article/details/51800991

继续访问

poi导出excel,实现一个excel中多个sheet(可解决poi导出限制65536的问题...

本文章的excel实现导出多个sheet是在上一篇poi导出的基础上实现的,这么久了,对于上一篇文章的poi也作出过一些优化。 这里我只贴修改了的方法的代码,其余的和上一篇文章的一样。 /** * 导出excel.在一个页面中单独导出Excel ...

基于Apache POI导出(百万级)大数据量Excel的实现_一朵风中摇曳的水仙...

支持单个 excel 的 sheet 导出100w 的数据 ApachePOI操作Excel对象 1.HSSF:操作Excel 2007之前版本(.xls)格式,生成的EXCEL不经过压缩直接导出 2.XSSF:操作Excel 2007及之后版本(.xlsx)格式,内存占用高于HSSF ...

解决POI的XSSFWorkbook导入大excel的内存消耗过大问题

方式1:使用SXSSFWorkbook ,经过测试,这个情况无效,因为本质上SXSSFWorkbook 也是通过XSSFWorkbook来的,他可以解决写出excel的场景,但是解决不了我们这种用户上传且读取excel中的内容的场景 XSSFWorkbook XSSFWorkbook = new XSSFWorkbook(fileInputStream)System.gc()SXSSFWorkbook SXSSFWorkbook = new SXSS

继续访问

导入导出

原文地址:https://blog.csdn.net/qq_29631809/article/details/72785338 创建流程:(上级为 下级的载体) 1:.创建 工作簿 2.创建 sheet(可以创建多个) 3.创建行 4.创建单元格 接下来 分别说下 工作簿的常用三种形式的区别,他们分别是 1.HSSFWorkbook 2.XSSFWorkbook 3.SXSSFWork...

继续访问

NPOI导出Excel 65536限制

1 #region NPOI 导出excel数据超65535自动分表 2 /// <summary>3 /// DataTable转换成Excel文档流,并输出到客户端 4 /// </summary>5 /// <param name="table">...

继续访问

java导出csv文件 为解决导出excel时每个单元格的限制(32767)

此实现方法仅供参考 因为本人导出数据量不大所采取的方法 如数据量大,会到至内存溢出请知晓 在这还提下:导出时内容自己换行 只需在内容前尾各加双引号就行。 如图 1、准备导出工具类 // An highlighted block package com.testimport java.io.BufferedWriterimport java.io.Fileimport java.io...

继续访问

Excel单元格数据超过32767报错问题处理

java poi 32767

继续访问

SXSSFWorkbook Excel 大量数据导出

注意 SXSSFWorkbook 用于大量数据的导出 SXSSFWorkbook是用来生成海量excel数据文件,主要原理是借助临时存储空间生成excel, SXSSFWorkbook专门处理大数据,对于大型excel的创建且不会内存溢出的,就只SXSSFWorkbook了。 它的原理很简单,用硬盘空间换内存(就像hashmap用空间换时间一样)。 SXSSFWorkbook是streami...

继续访问

EXCEL大数据量导出的解决方案

将web页面上显示的报表导出到excel文件里是一种很常见的需求。然而,当数据量较大的情况下,excel本身的支持最多65535行数据的问题便凸显出来。下面就给出大数据量导出到excel的解决方 案。 首先,对于数据超过了65535行的问题,很自然的就会想到将整个数据分块,利用excel的多sheet页的功能,将超出65535行后的数据写入到下一个sheet页中,即通过多sheet页的方式,突破了...

继续访问

几行代码,复杂Excel 导入导出,真心强大!

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达项目中使用:功能介绍IMPORT1、 ExcelHandle核心处理器;2、 ExcelWorkbookManageexcel所有工作表管理;3、 ExcelInitConfig配置文件初始化;4、 AbstractFileParser文件转换类;alanpoi import有何优势?1、 用户不需要额外引入poi...

继续访问

java中poi导出excel问题总结

java中poi导出excel问题总结

继续访问

java POI导出excel,列数限制在256列

有两篇文章写得比较好的 https://www.oschina.net/code/snippet_1052786_47435 https://www.jianshu.com/p/4c6eec65fdc3

继续访问

apache poi导出excel最大多少个sheet

大数据导出excel大小限制

写评论

评论

收藏

点赞

分享

java导出Excel通用方法,只需要一个list 集合。

package oa.common.utils

import java.io.OutputStream

import java.util.List

import javax.servlet.http.HttpServletResponse

import org.apache.struts2.ServletActionContext

import java.lang.reflect.Field

import jxl.Workbook

import jxl.format.Alignment

import jxl.format.Border

import jxl.format.BorderLineStyle

import jxl.format.VerticalAlignment

import jxl.write.Label

import jxl.write.WritableCellFormat

import jxl.write.WritableFont

import jxl.write.WritableSheet

import jxl.write.WritableWorkbook

/***

* @author lsf

*/

public class ExportExcel {

/***************************************************************************

* @param fileName EXCEL文件名称

* @param listTitle EXCEL文件第一行列标题集合

* @param listContent EXCEL文件正文数据集合

* @return

*/

public final static String exportExcel(String fileName,String[] Title, List<Object>listContent) {

String result="系统提示:Excel文件导出成功!"

// 以下开始输出到EXCEL

try {

//定义输出流,以便打开保存对话框______________________begin

HttpServletResponse response=ServletActionContext.getResponse()

OutputStream os = response.getOutputStream()// 取得输出流

response.reset()// 清空输出流

response.setHeader("Content-disposition", "attachmentfilename="+ new String(fileName.getBytes("GB2312"),"ISO8859-1"))

// 设定输出文件头

response.setContentType("application/msexcel")// 定义输出类型

//定义输出流,以便打开保存对话框_______________________end

/** **********创建工作簿************ */

WritableWorkbook workbook = Workbook.createWorkbook(os)

/** **********创建工作表************ */

WritableSheet sheet = workbook.createSheet("Sheet1", 0)

/** **********设置纵横打印(默认为纵打)、打印纸***************** */

jxl.SheetSettings sheetset = sheet.getSettings()

sheetset.setProtected(false)

/** ************设置单元格字体************** */

WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10)

WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10,WritableFont.BOLD)

/** ************以下设置三种单元格样式,灵活备用************ */

// 用于标题居中

WritableCellFormat wcf_center = new WritableCellFormat(BoldFont)

wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN)// 线条

wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE)// 文字垂直对齐

wcf_center.setAlignment(Alignment.CENTRE)// 文字水平对齐

wcf_center.setWrap(false)// 文字是否换行

// 用于正文居左

WritableCellFormat wcf_left = new WritableCellFormat(NormalFont)

wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN)// 线条

wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE)// 文字垂直对齐

wcf_left.setAlignment(Alignment.LEFT)// 文字水平对齐

wcf_left.setWrap(false)// 文字是否换行

/** ***************以下是EXCEL开头大标题,暂时省略********************* */

//sheet.mergeCells(0, 0, colWidth, 0)

//sheet.addCell(new Label(0, 0, "XX报表", wcf_center))

/** ***************以下是EXCEL第一行列标题********************* */

for (int i = 0i <Title.lengthi++) {

sheet.addCell(new Label(i, 0,Title[i],wcf_center))

}

/** ***************以下是EXCEL正文数据********************* */

Field[] fields=null

int i=1

for(Object obj:listContent){

fields=obj.getClass().getDeclaredFields()

int j=0

for(Field v:fields){

v.setAccessible(true)

Object va=v.get(obj)

if(va==null){

va=""

}

sheet.addCell(new Label(j, i,va.toString(),wcf_left))

j++

}

i++

}

/** **********将以上缓存中的内容写到EXCEL文件中******** */

workbook.write()

/** *********关闭文件************* */

workbook.close()

} catch (Exception e) {

result="系统提示:Excel文件导出失败,原因:"+ e.toString()

System.out.println(result)

e.printStackTrace()

}

return result

}

}

测试:

/**

* 导出excel

* @return

*/

public String excelPage(){

ExportExcel excel=new ExportExcel()

String str=""

try {

str = new String(getHTTP.getRequest().getParameter("wineOrg.orgName").getBytes("iso8859-1"),"UTF-8")

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

wineOrg.setOrgName(str)

List<Object>li=service.exportExcel(wineOrg)

String[] Title={"机构ID","会员编号","类别","名称","省ID","省名称","城市ID","城市名称","详细地址","联系人","性别","联系手机","联系电话","传真","邮箱","QQ","生日","积分","客户等级","现金账户余额","结算方式","客户类型","购买次数","购买支数","创建人ID","创建人姓名","create_time","del","STS","备注","负责人ID","负责人姓名","审核标识","审核人ID ","审核人姓名","审核日期","分配人ID","分配人姓名","分配日期","修改人ID","修改人姓名 ","修改时间"}

excel.exportExcel("客户资料信息.xls",Title, li)

return SUCCESS

}

通过Java程序导出带图表的excel吗?参考下面用spire.xls.jar来创建Excel图表的方法,这里以创建饼图为例,当然你也可以指定创建其他图表类型,如柱状图、折线图、雷达图、散点图等等:

import com.spire.xls.*

import com.spire.xls.charts.ChartSerie

import java.awt.*

public class CreatePieChart {

public static void main(String[] args) {

//创建Workbook对象

Workbook workbook = new Workbook()

//获取第一个工作表

Worksheet sheet = workbook.getWorksheets().get(0)

//将图表数据写入工作表

sheet.getCellRange("A1").setValue("年份")

sheet.getCellRange("A2").setValue("2002")

sheet.getCellRange("A3").setValue("2003")

sheet.getCellRange("A4").setValue("2004")

sheet.getCellRange("A5").setValue("2005")

sheet.getCellRange("B1").setValue("销售额")

sheet.getCellRange("B2").setNumberValue(4000)

sheet.getCellRange("B3").setNumberValue(6000)

sheet.getCellRange("B4").setNumberValue(7000)

sheet.getCellRange("B5").setNumberValue(8500)

//设置单元格样式

sheet.getCellRange("A1:B1").setRowHeight(15)

sheet.getCellRange("A1:B1").getCellStyle().setColor(Color.darkGray)

sheet.getCellRange("A1:B1").getCellStyle().getExcelFont().setColor(Color.white)

sheet.getCellRange("A1:B1").getCellStyle().setVerticalAlignment(VerticalAlignType.Center)

sheet.getCellRange("A1:B1").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center)

sheet.getCellRange("B2:C5").getCellStyle().setNumberFormat("\"¥\"#,##0")

//添加饼图

Chart chart = sheet.getCharts().add(ExcelChartType.Pie)

//设置图表数据区域

chart.setDataRange(sheet.getCellRange("B2:B5"))

chart.setSeriesDataFromRange(false)

//设置图表位置

chart.setLeftColumn(3)

chart.setTopRow(1)

chart.setRightColumn(11)

     chart.setBottomRow(20)

//设置图表标题

chart.setChartTitle("年销售额")

chart.getChartTitleArea().isBold(true)

chart.getChartTitleArea().setSize(12)

//设置系列标签

ChartSerie cs = chart.getSeries().get(0)

cs.setCategoryLabels(sheet.getCellRange("A2:A5"))

cs.setValues(sheet.getCellRange("B2:B5"))

cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true)

chart.getPlotArea().getFill().setVisible(false)

 //保存文档

workbook.saveToFile("output/PieChart.xlsx", ExcelVersion.Version2016)

}

}

饼图创建效果:

excel饼状图效果