POI&EasyExcel

目前最流行Apache和阿里巴巴EasyExcel
pox.xml

POI:写入数据
        <!--03版本-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <!--07版本-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

对Exce进行分析
工作簿:相当于整个Excel
工作表:sheet
行:
列:
03版本.xls

  • 最大行数为6536

07版本.xlsx

  • 最大行数没有限制
//写入03版本.xls
//创建工作簿
        Workbook workbook = new HSSFWorkbook();
        //创建工作表---参数可有可无
        Sheet sheet = workbook.createSheet("monster");
        //创建行
        Row row = sheet.createRow(0);
        //创建列
        Cell cell = row.createCell(0);
        cell.setCellValue("今天的不开就止于此吧,明天依旧光芒万丈");
        Cell cell1 = row.createCell(1);
        String date = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        cell1.setCellValue(date);
        //生成一张表
        FileOutputStream fileOutputStream = new FileOutputStream(PATH+"kuang03.xls");
        workbook.write(fileOutputStream);
   //写入07版本.xlsx
  //创建工作簿
        Workbook workbook = new XSSFWorkbook();//使用XSSFWorkbook面向接口编程
        //创建工作表---参数可有可无
        Sheet sheet = workbook.createSheet("monster");
        //创建行
        Row row = sheet.createRow(0);
        //创建列
        Cell cell = row.createCell(0);
        cell.setCellValue("今天的不开就止于此吧,明天依旧光芒万丈");
        Cell cell1 = row.createCell(1);
        String date = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        cell1.setCellValue(date);
        //生成一张表
        FileOutputStream fileOutputStream = new FileOutputStream(PATH+"kuang03.xlsx");
        workbook.write(fileOutputStream);


大文件写入:

  • 03版本(HSSFWorkbook)
    注:因为最多写入65536如果超出报错如下:
java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535)
 public  void testWriteBigData() throws IOException {
        //创建工作簿
       Workbook workbook = new HSSFWorkbook();
        //创建文件
        Sheet sheet = workbook.createSheet();
        //写入数据
        for (int i = 0; i < 65536; i++) {
            Row row = sheet.createRow(i);
            for (int cell = 0; cell < 10; cell++) {
                Cell cell1 = row.createCell(cell);
                cell1.setCellValue(cell);
            }
        }
        FileOutputStream fileOutputStream = new FileOutputStream(PATH+"big03.xls");
        workbook.write(fileOutputStream);


    }
  • 07版本(XSSFWorkbook)

    • 优点:可以写入较大的数据量如20万条
    • 缺点:写入时数据非常慢,内存消耗大,会发生内存溢出
  public  void testWriteBigData07() throws IOException {
        //创建工作簿
        Workbook workbook = new XSSFWorkbook();
        //创建文件
        Sheet sheet = workbook.createSheet();
        //写入数据
        for (int i = 0; i < 65536; i++) {
            Row row = sheet.createRow(i);
            for (int cell = 0; cell < 10; cell++) {
                Cell cell1 = row.createCell(cell);
                cell1.setCellValue(cell);
            }
        }
        FileOutputStream fileOutputStream = new FileOutputStream(PATH+"big03.xlsx");
        workbook.write(fileOutputStream);


    }
  • 07升级版(SXSSFWorkbook)
    在这里插入图片描述
 public  void testWriteBigData07Super() throws IOException {
        //创建工作簿
        Workbook workbook = new SXSSFWorkbook();
        //创建文件
        Sheet sheet = workbook.createSheet();
        //写入数据
        for (int i = 0; i < 65536; i++) {
            Row row = sheet.createRow(i);
            for (int cell = 0; cell < 10; cell++) {
                Cell cell1 = row.createCell(cell);
                cell1.setCellValue(cell);
            }
        }
        FileOutputStream fileOutputStream = new FileOutputStream(PATH+"big03.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
      



    }
POI:读数据

03版本读取

 public void ReadTest03() throws Exception {
        String PATH ="D:\\线上上课名单.xls";
        //获取输入流
        FileInputStream fileInputStream = new FileInputStream(new File(PATH));
        //创建工作簿读取
        Workbook workbook = new HSSFWorkbook(fileInputStream);
        //获取表格
        Sheet sheet = workbook.getSheetAt(0);
        //获取到行(参数表示第几行)
        Row row = sheet.getRow(0);
        //根据行去获取列,最终就是每个单元格(参数表示第几列)
        Cell cell = row.getCell(1);
        Cell cell1 = row.getCell(2);
        Cell cell2 = row.getCell(4);
        //获取值:在获取值的时候需要注意获取值得类型
        cell.getStringCellValue();
        cell1.getStringCellValue();
        cell2.getStringCellValue();


    }

07版本读取

 public void ReadTest07() throws Exception {
        String PATH ="D:\\线上上课名单.xlsx";
        //获取输入流
        FileInputStream fileInputStream = new FileInputStream(new File(PATH));
        //创建工作簿读取
        Workbook workbook = new XSSFWorkbook(fileInputStream);
        //获取表格
        Sheet sheet = workbook.getSheetAt(0);
        //获取到行(参数表示第几行)
        Row row = sheet.getRow(0);
        //根据行去获取列,最终就是每个单元格(参数表示第几列)
        Cell cell = row.getCell(1);
        Cell cell1 = row.getCell(2);
        Cell cell2 = row.getCell(4);
        //获取值:在获取值的时候需要注意获取值得类型
        cell.getStringCellValue();
        cell1.getStringCellValue();
        cell2.getStringCellValue();


    }

* 读取不同的数据类型
注意:类型判断

 public void ReadCellType () throws Exception {
       //获取输入流
        FileInputStream fileInputStream = new FileInputStream(new File(PATH));
        //创建工作簿读取
        Workbook workbook = new HSSFWorkbook(fileInputStream);
        Sheet sheet = workbook.getSheetAt(0);
        //获取表头
        Row rowTitle = sheet.getRow(0);
        //先去判断是否为空
        if(rowTitle!=null){
            //获取表头有多少个(数量)
            int number = rowTitle.getPhysicalNumberOfCells();
            for (int i = 0; i <number ; i++) {
                Cell cell = rowTitle.getCell(i);
                if(cell!=null){
                    int cellType = cell.getCellType();
                    String stringCellValue = cell.getStringCellValue();
                    System.out.print(stringCellValue+"|");
                }
            }
        }
        //获取表中所有行
        int numberRow = sheet.getPhysicalNumberOfRows();
        for (int i = 1; i <numberRow ; i++) {
            //获取行
            Row row = sheet.getRow(i);
            //判断行是否为空
            if(row!=null){
                //获取到当前行的所有列
                int numberCell = rowTitle.getPhysicalNumberOfCells();
                for (int j = 0; j <numberCell ; j++) {
                    Cell cell = row.getCell(j);
                    //匹配列的数据类型
                    if(cell!=null){
                        int cellType = cell.getCellType();
                        String cellValue="";
                        switch (cellType){
                            case HSSFCell.CELL_TYPE_STRING://字符串
                                System.out.print("【STRING】");
                                  cellValue = cell.getStringCellValue();
                                break;
                            case HSSFCell.CELL_TYPE_BOOLEAN://布尔                          System.out.print("【BOOLEAN】");
                                  cellValue = cell.getBooleanCellValue()+"";
                                break;
                            case HSSFCell.CELL_TYPE_BLANK://System.out.print("【BLANK】");
                                break;
                            case HSSFCell.CELL_TYPE_NUMERIC://数字又划分(日期/普通数字)
                                System.out.print("【NUMERIC】");
                                if(HSSFDateUtil.isCellDateFormatted(cell)){//日期
                                    System.out.print("【日期】");
                                    Date date = cell.getDateCellValue();
                                    cellValue = new DateTime(date).toString("yyyy-MM-dd");

                                }else {
                                    //不是日期转换成字符串防止数字过长
                                    System.out.print("【数字转为字符串输出】");
                                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                                    cellValue = cell.toString();
                                }
                                break;
                            case HSSFCell.CELL_TYPE_ERROR://字符串
                                System.out.print("【ERROR】");
                                break;

                        }
                        System.out.print(cellValue);
                    }

                }
                System.out.println();
            }
        }

        fileInputStream.close();
    }

EasyExcel

第一步:导入依赖

 <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>easyexcel</artifactId>
     <version>2.1.6</version>
 </dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值