Poi解析excel表格          返回主页

Poi是Java中一款常用的Excel解析库,最近在做相关的开发,对使用的感受做一个总结。

Excel导入

  1. 首先获取FileOutputStream,定义HSSFWorkbook,即一个excel表格

    FileOutputStream out = new FileOutputStream(filepath);
    HSSFWorkbook workbook = PoiUtils.getWorkBookInstance();
    
  2. 通过HSSFWorkbook生成HSSFSheet,即一个excel表格中的子表

    HSSFSheet sheet = PoiUtils.getSheet(workbook, "学生成绩统计");
    
  3. 往sheet中注入数据

    PoiUtils.buildLine(sheet, 0, 3, new String[]{"id", "name", "passwd"});
    
    ......
        /**
         * 构造excel行
         * 传入的值为Object数组,因此可以传递任意的数组
         * 在内部转为String输出
         * @param hssfSheet excel的sheet
         * @param rowNum    行数,建议第一行为标题,第二行开始是值
         * @param cellSize  列数目,即每一行表格数目
         * @param params    参数列表,将所有的值转换为String后统一写入
         * @return HSSFRow
         */
        public static HSSFRow buildLine(HSSFSheet hssfSheet, int rowNum, int cellSize, Object[] params) {
            HSSFRow row = hssfSheet.createRow(rowNum);
            //创建行单元格
            for (int i = 0; i < cellSize; i++) {
                HSSFCell cell = row.createCell(i);
                cell.setCellValue(String.valueOf(params[i]));
            }
            System.out.println("successfully insert");
            return row;
        }
    
    1. 创建行单元,即Row
    2. 创建列单元,即cell;
    3. 往cell中注入值
  4. 往HSSFWorkbook写入FileOutStream对象

    workbook.write(out);
    
  5. 关闭输出流

    out.close();
    

excel数据导入数据库

  1. 创建文件输入流

    FileInputStream in = new FileInputStream(filename);

  2. 创建excel文档,通过HSSFWorkbook写入文件输入流

    HSSFWorkbook workbook = new HSSFWorkbook(in);

  3. 创建excel文档的sheet

    HSSFSheet sheet = workbook.getSheet("学生成绩统计");

  4. 获取行数,列数

    //获取总行数 int rowNum = sheet.getLastRowNum(); int colNum = row.getPhysicalNumberOfCells(); //列数

  5. 从第二行开始循环写入excel的值,通过getStringCellValue()

    //正文内容第二行开始
    for (int i = 1; i < rowNum; i++) {
        //获取行
        row = sheet.getRow(i);
        //每个单元格内容使用-分隔或者放到bean里
        //System.out.println(row.getCell(j));
        String name = null;
        String passwd = null;
        for (int j = 0; j < colNum; j++) {
            System.out.println(row.getCell(j));
            Cell nameCell = row.getCell(1);
            Cell passwdCell = row.getCell(2);
            name = nameCell.getStringCellValue();
            passwd = passwdCell.getStringCellValue();
        }
        //插入数据库,此处为数据库dao逻辑
        saveIntoDB(name, passwd);
    }
    

小结

本文主要讲解了Poi对excel的基本读写。

我的理解是Poi从面向对象的角度出发,从外向内定义了excel表格->表格sheet->sheet行->行中列元素,

按照这个顺序进行数据的导入;

读取excel表格时候对存在的excel表格进行打开,得到其中的sheet,然后解析行列。在每一行中对数据进行操作即可。