加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

java导出excel大量数据出现错误时解决办法

(2017-11-16 15:41:57)
标签:

大数据分析

数据分析师

数据挖掘

excel

java导出excel大量数据出现错误时解决办法

问题描述:java导出大量数据出现错误:jxl.write.biff.RowsExceededException: The maximum number of rows permitted on a works
问题解释:这个问题实质上就是在导出数据的时候数据的最大值超出了jxl.write包中预设的sheet表格的最大值后者是内存溢出问题,是因为一次性将大量数据载入到内存中,导致虚拟内存不足。
解决的办法:
1、需要注意Excel的行数限制,在导出文件的时候对大数据量导入进行分页处理。
2、将大量数据加载到内存中,会使虚拟内存不足,导致程序无法运行,可以通过增加虚拟内存来解决此问题,但不推荐此方式,建议将大量数据的操作划分成小量数据进行操作。
具体的测试代码如下:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class TestDome {
    public static void outputExcelData() throws IOException, WriteException {
       
        List result = new ArrayList();
        User user = new User();
        user.setId("1");
        user.setName("zhangshang");
        result.add(user);
        User user2 = new User();
        user2.setId("1");
        user2.setName("shanghai");
        result.add(user2);
        User user3 = new User();
        user3.setId("1");
        user3.setName("beijing");
        result.add(user3);
       
        String fileName = "D://sfData.xls";
       
        WritableWorkbook wwb = Workbook.createWorkbook(new File(fileName));
        File dbfFile = new File(fileName);
        if (!dbfFile.exists() || dbfFile.isDirectory()) {
            dbfFile.createNewFile();
        }
        int totle = result.size();//获取List集合的size
        int mus = 2;//每个工作表格最多存储2条数据(注:excel表格一个工作表可以存储65536条)
        int avg = totle / mus;
        for (int i = 0; i < avg 1; i ) {
            WritableSheet ws = wwb.createSheet("列表" (i 1), i); //创建一个可写入的工作表
            //添加表头
            ws.addCell(new Label(0, 0, "序号"));
            ws.addCell(new Label(1, 0, "姓名"));
            int num = i * mus;
            int index = 0;
            for (int m = num; m < result.size(); m ) {
                if (index == mus) {//判断index == mus的时候跳出当前for循环
                    break;
                }
                User use = (User) result.get(m);
                //将生成的单元格添加到工作表中
                //(这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行)
                ws.addCell(new Label(0, index 1, use.getId()));
                ws.addCell(new Label(1, index 1, use.getName()));
                index ;
            }
        }
        wwb.write();//从内存中写入文件中
        wwb.close();//关闭资源,释放内存
    }
    //测试
    public static void main(String[] args) {
        try {
            outputExcelData();
            System.out.println("导出完成!");
        } catch (WriteException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


public class User {
    private String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有