java导出大批量(百万以上)数据的excel文件
本文实例为大家分享了java导出百万以上数据的excel文件,供大家参考,具体内容如下
1.传统的导出方式会消耗大量的内存,2003每个sheet页最多65536条数据,2007每个sheet页可以达到100万条数据以上,2007会在生成Workbook时清理数据,所以2007导出量更大;
2.可以导出多个excel文件到某个目录中,然后打包下载;
3.导出excel格式的xml文件,这种方式可以分批导出数据,适用于大批量数据的导出,以下简单介绍这种方式:
代码如下:
packagecom.epay.utils;
/**
*大数据量导出成EXCEL或XML
*@authorqad
*2017-04-22
*/
importjava.io.BufferedOutputStream;
importjava.io.DataOutputStream;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
publicclassTest{
publicstaticvoidmain(String[]args){
StringBuffersb=newStringBuffer();
try{
DataOutputStreamrafs=newDataOutputStream(
newBufferedOutputStream(newFileOutputStream(newFile(
"d://test.xls"))));
sb.append("");
sb.append("\n");
sb.append("");
sb.append("\n");
sb.append("");
sb.append("\n");
sb.append("");
sb.append("\n");
sb.append("\n");
sb.append("\n");
sb.append(" \n");
sb.append(" \n");
sb.append(" \n");
sb.append(" \n");
sb.append(" \n");
sb.append(" \n");
sb.append("\n");
sb.append(" \n");
intsheetcount=0;
intrecordcount=65535;
intcurrentRecord=0;
inttotal=100000;
intcol=20;
sb.append("");
sb.append("\n");
sb.append("");
sb.append("\n");
for(inti=0;irecordcount||currentRecord==0)
&&i!=0){//一个sheet写满
currentRecord=0;
rafs.write(sb.toString().getBytes());
sb.setLength(0);
sb.append("");
sb.append("");
sb.append("\n");
sb.append("False ");
sb.append("\n");
sb.append("False ");
sb.append("\n");
sb.append("");
sb.append("\n");
sb.append("");
sb.append("");
sb.append("\n");
sb.append("");
sb.append("\n");
}
sb.append("");
for(intj=0;j111");
sb.append("\n");
}
sb.append("
");
if(i%5000==0){
rafs.write(sb.toString().getBytes());
rafs.flush();
sb.setLength(0);
}
sb.append("\n");
currentRecord++;
}
rafs.write(sb.toString().getBytes());
sb.setLength(0);
sb.append("");
sb.append("");
sb.append("\n");
sb.append("False ");
sb.append("\n");
sb.append("False ");
sb.append("\n");
sb.append("");
sb.append("\n");
sb.append("");
sb.append("");
sb.append("\n");
rafs.write(sb.toString().getBytes());
rafs.flush();
rafs.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
导出xml文件之后直接修改后缀名为.xlsx就可以直接打开,弊端:无法导出.xls格式的excel文件.以上只是一种简单想法,留待以后具体实现.
扩展:既然可以使用xml文件导出excel,那么导出csv文件之后也可以直接改后缀名为.xls,目前只是一种想法,尚未证实可行性.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。