Java对超过百万级数据的Excel的处理方式(读取和写入)

说明

帮助测试做的工具。
测试需要对多个导出的结果进行比较,并将比较的结果写入到一个Excel中。
导出的文件格式包括:txt, csv, xls, xlxs
写入的文件格式为:xlxs

由于最终的写入方式是一致的,先说写入。
涉及到客户产品信息,代码仅举例子说明,具体的逻辑嵌套请自行处理(测试组要求比较数据的时候需要读取的时候同步写入)。

写入XLXS

由于写入的数据量不确定,最少的时候可能只有几条,最多的时候将近两千万。因此,只需要考虑最多就行了,根据测试组要求,运行时间不是问题,但是数据记录要齐全(代码为将100000000个左右的数字写入Excel中)。

写入一个Excel
    public void writeInOneFile(String path, String name) throws IOException {
   
        Workbook wb = new SXSSFWorkbook(3000);
        int number = 0;
        int count = 1;
        Sheet sheet = wb.createSheet("result " + count);
        Row row = sheet.createRow(number);
        for (int i = 0; i < 10001; i++) {
   
            for (int j = 0; j < 1001; j++) {
   
                for (int k = 0; k < 10; k++) {
   
                    Cell cell= row.createCell(k);
                    cell.setCellValue("" + (i + j + k));
                }
                number = number + 1;
                //单个Sheet页的最大写入数量约为104W行,这里写入100W行就结束一个Sheet页
                if (number >= 1000000) {
   
                    count = count + 1;
                    sheet = wb.createSheet("result " + count);
                    System.out.println(sheet.getSheetName());
                    number = 0;
                }
                row = sheet.createRow(number);
            }
        }
        FileOutputStream fos = new FileOutputStream(path + "\\" + name + ".xlsx");
        wb.write(fos);
        fos.flush();
        fos.close();
        wb.close();
    }
写入多个excel
    public String createExcel(String path, String name) {
   
        return path + "\\" + name + ".xlsx";
    }
    
    public void writeInMoreFile(String path, String name) throws IOException, InterruptedException {
   
        int index = 0;
        String fileName = createExcel(path, name + " " + index);
        Workbook wb = new SXSSFWorkbook(5000);
        ;
        int number = 0;
        Sheet sheet = wb.createSheet();
        Row row = sheet.createRow(number);
        for (int i = 0; i < 10001; i++) {
   
            for (int j = 0; j < 1001; j++) {
   
                for (int k = 0; k < 10; k++) {
   
                    Cell cell= row.createCell(k);
                    cell.setCellValue("" + (i + j + k));
                }
                number = number + 1;
                //单个Sheet页的最大写入数量约为104W行,这里写入100W行就结束一个Excel
                if (number >= 1000000) {
   
                    FileOutputStream fos = new FileOutputStream(fileName);
                    wb.write(fos);
                    fos.flush();
                    fos.close();
                    Thread.sleep(1000);
                    index = index + 1;
                    fileName = createExcel(path, name + " " + index);
                    wb = new SXSSFWorkbook(5000);
                    sheet = wb.createSheet();
                    System.out.println(fileName);
                    number = 0;
                }
                row = sheet.createRow(number);
            }
        }
        FileOutputStream fos = new FileOutputStream(fileName);
        wb.write(fos);
        fos.flush();
        fos.close();
        wb.close();
    }

最终的结果为写入一个excel的文件大小为380M左右,分开的文件一个为38M左右。

读取

对于不同的文件采取不同的读取方式

txt和csv

属于简单的文本读取,直接使用BufferedReader就可以了,这一类的代码很多,也是很基础的功能,这里不展示代码了。

xls 和 xlsx

先准备一些载体对象

载体对象
    class CustomSheet {
   
        private String name;

        private List<CustomRow> rows;

        public CustomSheet(String name, List<CustomRow> rows) {
   
            this.name = name;
            this.rows = rows;
        }

        public CustomSheet() {
   
        }

        public String getName() {
   
            return name;
        }

        public void setName(String name) {
   
            this.name = name;
        }

        public List<CustomRow> getRows() {
   
            return rows;
        }

        public void setRows(List<CustomRow> rows) {
   
            this.rows = rows;
        }

        @Override
        public boolean equals(Object o) {
   
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JXL是Java Excel API的缩写,可以处理Excel文件的读取写入。以下是使用JXL进行Excel文件读取写入的示例代码: 1. 读取Excel文件: ```java import java.io.File; import java.util.ArrayList; import java.util.List; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; public class ExcelReader { public static void main(String[] args) { try { File file = new File("test.xls"); Workbook workbook = Workbook.getWorkbook(file); Sheet sheet = workbook.getSheet(0); int rowCount = sheet.getRows(); List<String[]> list = new ArrayList<String[]>(); for (int i = 0; i < rowCount; i++) { Cell[] cells = sheet.getRow(i); String[] row = new String[cells.length]; for (int j = 0; j < cells.length; j++) { row[j] = cells[j].getContents(); } list.add(row); } for (String[] row : list) { for (String cell : row) { System.out.print(cell + "\t"); } System.out.println(); } workbook.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 2. 写入Excel文件: ```java import java.io.File; import java.util.ArrayList; import java.util.List; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class ExcelWriter { public static void main(String[] args) { try { File file = new File("test.xls"); WritableWorkbook workbook = Workbook.createWorkbook(file); WritableSheet sheet = workbook.createSheet("Sheet1", 0); List<String[]> list = new ArrayList<String[]>(); list.add(new String[] {"Name", "Age", "Gender"}); list.add(new String[] {"Tom", "20", "Male"}); list.add(new String[] {"Lucy", "18", "Female"}); for (int i = 0; i < list.size(); i++) { String[] row = list.get(i); for (int j = 0; j < row.length; j++) { Label label = new Label(j, i, row[j]); sheet.addCell(label); } } workbook.write(); workbook.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码演示了如何使用JXL处理Excel文件的读取写入,通过这些示例代码,你可以根据自己的需要进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值