经过改良后可以导出超过70000条数据的导出公共excel类

本文介绍了一种使用Java批量将List集合数据导出为多个Excel文件的方法,通过将大数据集拆分为若干个小批次来避免单个Excel文件超过65536行的限制。该方法适用于需要大量数据导出的应用场景。

public static <T> void export(OutputStream os, List<T> obj, String[] head,String[] fidldName)
throws Exception {
// 创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(os);
double num =Math.ceil(obj.size()/65000d);
if (num>1) {
for (int i =0; i < num; i++) {
List<T> objj=new ArrayList<T>();
int max=0;
int k=0;
if (obj.size()<=65536) max=obj.size();
if (obj.size()>65536) max=65536*i+65536;
if (num-1==i) max=obj.size();
for (int j = 65536*i; j < max; j++) {
objj.add(k, obj.get(j));
k++;
}
exportS(os,objj,head,fidldName,(int)num,workbook);
}
}else{
exportS(os,obj,head,fidldName,(int)num,workbook);
}
workbook.write();
workbook.close();
os.close();
}
public static <T> void exportS(OutputStream os, List<T> obj, String[] head,String[] fidldName,int num,WritableWorkbook workbook) throws Exception {

// 创建新的一页
WritableSheet sheet = workbook.createSheet("Sheet"+num,num);
// 创建要显示的具体内容
// String[] head = HeaderExcel.List;
for (int i = 0; i < head.length; i++) {
Label formate = new Label(i, 0, head[i] + "", titleFormat);
sheet.addCell(formate);
}
int i = 0;
Field field = null;
for (T t : obj) {
Object [] objw=new Object[50];
int k = 0;
//System.err.println(fidldName.length);

for (int j = 0; j < fidldName.length; j++) {
field = t.getClass().getDeclaredField(fidldName[j]);
field.setAccessible(true);
if(field.get(t) != null)
objw[k]=field.get(t);
else
objw[k]="-";
k++;
}

for (int j = 0; j < head.length; j++) {
Label data = new Label(j, 1 + i, "" + objw[j]);
sheet.addCell(data);
}
i++;
}

}

转载于:https://www.cnblogs.com/wanghongjie/p/6116245.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值