zoukankan      html  css  js  c++  java
  • POI和easyExcel

     1.常用场景

    (1)将用户数据导出为excel表格(导出数据)

    (2)将Excel表中的数据导出到网站数据库中

    操作Excel最常用的就是Apache的POI和阿里巴巴的easyExcel。

    2.官网地址

    Apache POI的官网:https://poi.apache.org/

    easyExcel的官网:https://github.com/alibaba/easyexcel

    3.poi和easyExecel的区别:

    以下是我在官网截的图:

     

     https://www.yuque.com/easyexcel/doc/easyexcel

     4.Excel中的对象

        在java中万物皆对象,Excel也不例外,Excel中的对象有:

        工作簿:Workbook(是一个接口)

        (使用时需要导入Workbook:import org.apache.poi.ss.usermodel.Workbook;)

       Workbook的三个实现类:

    (1)HSSFWorkbook:HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
    (2)XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;
    (3)SXSSFworkbook:是XSSFWorkbook的升级版,当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space;内存溢出错误。这时应该用SXSSFworkbook。
     工作表:Sheet (使用时需要导入Sheet:import org.apache.poi.ss.usermodel.Sheet;)

        行:Row     (使用时需要导入Row:import org.apache.poi.ss.usermodel.Row;)

        列:Cell  (使用时需要导入Cell  :import org.apache.poi.ss.usermodel.Cell;)

     5.03版Excel表的生成代码:

    package com.lqz.controller;
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.junit.Test;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    /**
     * @Author:liqinzhen
     * @Date:2020/6/9
     * @Description:
     */
    public class ExcelWriteTest {
        String  path = "E:\java\project\springmvc-ajax-json";
        @Test
        public void test() throws IOException {
            //1.创建一个工作簿
            Workbook workbook = new HSSFWorkbook();
            //2.创建一个工作表,因为工作表在工作簿中,所以用工作簿创建工作表
            Sheet sheet = workbook.createSheet("学生表");
            //3.创建一个 行
            Row row1 = sheet.createRow(0);
            //4.创建一个单元格
            Cell cell11 = row1.createCell(0);
            //给单元格设置值
            cell11.setCellValue("陈咬金");;
            //创建第二个单元格
            Cell cell12 = row1.createCell(1);
            cell12.setCellValue("1021");
            //创建第二行
            Row row2 = sheet.createRow(1);
            //创建第二行的第一个单元格
            Cell cell21 = row2.createCell(0);
            cell21.setCellValue("芈月");
            //创建第二行的第二个单元格
            Cell cell22 = row2.createCell(1);
            cell22.setCellValue("1023");
            //生成一张表(io流),03版的Excel使用.xls结尾
            FileOutputStream fileOutputStream = new FileOutputStream(path+"学生表03.xls");
            //输出
            workbook.write(fileOutputStream);
            //关闭流
            fileOutputStream.close();
            System.out.println("学生表03.xls表生成完毕");
        }
    
    }

    6.07版的Excel生成代码:

    //(1)导入少量数据
    package
    com.lqz.controller; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.junit.Test; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * @Author:liqinzhen * @Date:2020/6/9 * @Description: */ public class ExcelWriteTest { String path = "E:\java\project\springmvc-ajax-json"; @Test public void test() throws IOException { //1.创建一个工作簿 Workbook workbook = new XSSFWorkbook(); //2.创建一个工作表,因为工作表在工作簿中,所以用工作簿创建工作表 Sheet sheet = workbook.createSheet("学生表"); //3.创建一个 行 Row row1 = sheet.createRow(0); //4.创建一个单元格 Cell cell11 = row1.createCell(0); //给单元格设置值 cell11.setCellValue("陈咬金");; //创建第二个单元格 Cell cell12 = row1.createCell(1); cell12.setCellValue("1021"); //创建第二行 Row row2 = sheet.createRow(1); //创建第二行的第一个单元格 Cell cell21 = row2.createCell(0); cell21.setCellValue("芈月"); //创建第二行的第二个单元格 Cell cell22 = row2.createCell(1); cell22.setCellValue("1023"); //生成一张表(io流),03版的Excel使用.xls结尾 FileOutputStream fileOutputStream = new FileOutputStream(path+"学生表07.xls"); //输出 workbook.write(fileOutputStream); //关闭流 fileOutputStream.close(); System.out.println("学生表07.xls表生成完毕"); } }

    //(2)批量数据导入
    @Test
    public void test02() throws IOException {
        String  path = "E:\java\project\springmvc-ajax-json";
        //1.创建一个工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();
        //2.创建一个工作表
        HSSFSheet sheet = workbook.createSheet();
        for (int rowNum = 0;rowNum<65536;rowNum++){
            //3.创建行
            Row row = sheet.createRow(rowNum);
            for (int cellNum = 0;cellNum <5;cellNum++){
                Cell cell = row.createCell(cellNum);
                cell.setCellValue(cellNum);
            }
        }
        System.out.println("写入完毕");
        FileOutputStream fileOutputStream = new FileOutputStream(path + "工作表03.xls");
        workbook.write(fileOutputStream);
        //关闭流
        fileOutputStream.close();
    }

    //(3)读取Excel文件
    @Test
    public void readExcelTest() throws IOException { //获取文件流 FileInputStream fileInputStream = new FileInputStream(path + "学生表03.xls"); //创建一个工作簿 HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream); //得到表 Sheet sheet = workbook.getSheetAt(0); //得到行 Row row = sheet.getRow(0); //得到列 Cell cell = row.getCell(0); System.out.println(cell.getStringCellValue());
            fileInputStream.close();
    }
    //读取不同数据类型 
    @Test
    public void testCellType() throws IOException { //获取文件流 FileInputStream fileInputStream = new FileInputStream(path + "学生表03.xls"); //创建一个工作簿 HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream); HSSFSheet sheet = workbook.getSheetAt(0); //获取标题,表的第一行 Row rowTile = sheet.getRow(0); //如果第一行不为空 if (rowTile != null) { //读取第一行列的数量 int numberOfCells = rowTile.getPhysicalNumberOfCells(); //循环遍历每一列 for (int i = 0; i < numberOfCells; i++) { //获得列 Cell cell = rowTile.getCell(i); //如果列不为空 if (cell != null) { //获取列的类型 CellType cellType = cell.getCellType(); String stringCellValue = cell.getStringCellValue(); System.out.print(stringCellValue + "|"); } } } System.out.println(); //获取行内容,行的数量 int numberOfRows = sheet.getPhysicalNumberOfRows(); //循环获取每一行 for (int i = 1; i < numberOfRows; i++) { //获得行 Row row = sheet.getRow(i); if (row != null) { //获取列 int numberOfCells1 = rowTile.getPhysicalNumberOfCells(); for (int j = 0; j < numberOfCells1; j++) { System.out.print("[" + (j + 1) + (numberOfCells1 + 1) + "]"); Cell cell = rowTile.getCell(j); //匹配列的数据类型 if (cell != null) { CellType cellType = cell.getCellType(); String cellValue = ""; switch (cellType) { case STRING: System.out.println("[STRING]"); cellValue = cell.getStringCellValue(); break; case BOOLEAN: System.out.println("[BOOLEAN]"); cellValue = String.valueOf(cell.getStringCellValue()); break; case BLANK:// System.out.println("[BOOLEAN]"); break; case NUMERIC:// System.out.println("[NUMERIC]");//数字(普通数字,日期) if (HSSFDateUtil.isCellDateFormatted(cell)) { System.out.println("[日期]"); Date date = cell.getDateCellValue(); cellValue = new DateTime(date).toString("yyyy-MM-dd"); } else { System.out.println("转换为字符串输出"); cell.setCellType(STRING); cellValue = cell.toString(); } break; case ERROR:// System.out.println("[数据类型错误]"); break; } System.out.println(cellValue); } } } } //关闭流 fileInputStream.close(); }



  • 相关阅读:
    ubuntu如何设置dns?
    docker服务无法启动如何处理?
    yocto编译时报错"fontconfig-2.12.1/src/fcmatch.c:324:63: error: ‘PRI_CHAR_WIDTH_STRONG' undeclared here (not in a function); did you mean ‘PRI_WIDTH_STRONG’?"
    git如何将当前仓库的远程分支推到一个新的仓库中?
    linux下如何制作ubuntu系统启动盘(sd)?
    yocto编译时报错"glibc/locale/xlocale.h:39:4: note: previous declaration of '__locale_t' was here"
    19、异常处理
    18、文件与目录
    17、python对内存的使用
    16、正则表达式
  • 原文地址:https://www.cnblogs.com/liqinzhen/p/13085677.html
Copyright © 2011-2022 走看看