解析Excel数据

Posted lz2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析Excel数据相关的知识,希望对你有一定的参考价值。

解析Excel数据常用的方式就是使用POI和JXL工具了,这两种工具使用起来有些类似,这里记录一下使用方式提供个参考

POI使用

File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
workbook = WorkbookFactory.create(fis);
//poi3.6使用一下方式创建workbook
//workbook = new HSSFWorkbook(fis);  //.xls格式
int sheetNum = workbook.getNumberOfSheets();// Sheet的数量
System.out.println("共[" + sheetNum + "]个工作表");
for (int i = 0; i < sheetNum; i++) {
    System.out.println("开始读取第[" + (i + 1) + "]个工作表");
    Sheet sheet = workbook.getSheetAt(i);// 第i个Sheet
    String sheetName = sheet.getSheetName();
    System.out.println("工作表名称:" + sheetName);
    int rowNum = sheet.getPhysicalNumberOfRows();
    for (int j = 0; j < rowNum; j++) {
        System.out.println("开始读取第[" + (j + 1) + "]行数据:");
        Row row = sheet.getRow(j);
        int cellNum = row.getPhysicalNumberOfCells();
        for (int k = 0; k < cellNum; k++) {
            Cell cell = row.getCell(k);
            Object cellValue = null;
               //根据单元格类型拿数据
            CellType cellType = cell.getCellTypeEnum();
            switch (cellType) {
                case BOOLEAN:
                    cellValue = cell.getBooleanCellValue();
                    break;
                case ERROR:
                    cellValue = cell.getErrorCellValue();
                    break;
                case NUMERIC:
                    cellValue = cell.getNumericCellValue();
                    break;
                case STRING:
                    cellValue = cell.getStringCellValue();
                    break;
                default:
                    break;
            }
            
            //poi3.6使用以下方式判断单元格类型
            /*
                 switch (cell.getCellType()) {
                         case Cell.CELL_TYPE_BOOLEAN:
                               cellValue = cell.getBooleanCellValue();
                               break;
                         case Cell.CELL_TYPE_ERROR:
                                 cellValue = cell.getErrorCellValue();
                                 break;
                          case Cell.CELL_TYPE_NUMERIC:
                                 cellValue = cell.getNumericCellValue();
                                 break;
                          case Cell.CELL_TYPE_STRING:
                                 cellValue = cell.getStringCellValue();
                                 break;
                          default:
                                 break;
                                }
            */
            
            System.out.printf("每个单元格的值:"+cellValue);
        }
    }
    
}

注意POI版本使用上有些许的不同,poi3.6及以上.xls和.xlsx格式的Excel对应的是不同的workbook 实现类, HSSFWorkbook只能操作excel2003以下版本(.xls),XSSFWorkbook只能操作excel2007以上版本(.xlsx),并且判断单元格类型使用的方法也有些许不同,需要注意下。

JXL的使用

Workbook book = Workbook.getWorkbook(new File(filePath));
// 获得第一个表格对象
Sheet sheet = book.getSheet(0);  //这里0代表只解析第一个sheet页
// 拿到表格的行数
int row = sheet.getRows();
// 拿到表格的列数
int col = sheet.getColumns();
for (int j = 0; j < col; j++) {
    map = new HashMap<Integer, String>();
    for (int i = 0; i < row; i++) {
        Cell cell = sheet.getCell(j, i);
        String custContent = cell.getContents();
        //每个单元格的值
        System.out.printf("每个单元格的值:"+custContent);
    }
    
/*      //判断单元格类型
        CellType cellType = cell.getType();
        if(cellType == CellType.EMPTY){
                                                           //空值
        }else if(cellType == CellType.BOOLEAN){
            ((BooleanCell) cell).getValue();            //布尔值
        }else if(cellType == CellType.BOOLEAN_FORMULA){
            ((BooleanFormulaCell) cell).getValue();    //布尔值公式
        }else if(cellType == CellType.DATE){
            ((DateCell) cell).getDate();                //日期类
        }else if(cellType == CellType.DATE_FORMULA){
            ((DateFormulaCell)cell).getDate();            //日期公式
        }else if(cellType == CellType.NUMBER){
            ((NumberCell) cell).getValue();            //数字
        }else if(cellType == CellType.NUMBER_FORMULA){
            ((NumberFormulaCell) cell).getValue();        //数字公式
        }else if(cellType == CellType.STRING_FORMULA){
            ((StringFormulaCell) cell).getString();    //字符串公式
        }else if(cellType == CellType.ERROR){
            ((ErrorCell) cell).getContents();            //错误消息
        }else if(cellType == CellType.FORMULA_ERROR){
            ((ErrorFormulaCell) cell).getContents();    //公式错误
        }else element.setValue(cell.getContents());    
*/

 

以上是关于解析Excel数据的主要内容,如果未能解决你的问题,请参考以下文章

IT轮子系列——Excel上传与解析,一套代码解决所有Excel业务上传,你Get到了吗

POI解析Excel代码

尝试将 Vlookup 片段添加到我的 Excel 宏

Excel 模板下载功能 + 前后端解析 Excel 文件代码封装 + 前端上传 Excel 至数据库(SpringBoot + Vue 版)

Excel 模板下载功能 + 前后端解析 Excel 文件代码封装 + 前端上传 Excel 至数据库(SpringBoot + Vue 版)

Excel 模板下载功能 + 前后端解析 Excel 文件代码封装 + 前端上传 Excel 至数据库(SpringBoot + Vue 版)