解析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());
*/

原文地址:https://www.cnblogs.com/lz2017/p/10085805.html

时间: 2024-10-27 11:21:13

解析Excel数据的相关文章

npoi2.3+泛型+反射 根据配置统一解析excel数据到实体的基础方法

解析方法: /// <summary> /// excel数据解析到实体 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="sheet">npoi读取到的excel工作表,需要解析的工作表</param> /// <param name="startRowIndex">

VSTO学习之路:使用Open XML SDK for Office解析Excel数据

Excel2007以后,工作簿是以XML文本保存数据的,用压缩工具打开工作簿文件,结构大致如下: 文件夹下基本全部是xml文本文件.微软提供了Open XML SDK 2.5 for Office,其中定义了和这些xml文件相关的类,帮助我们使用xml的形式解析工作簿里的数据和内容.跳转到微软官方资料          跳转到Open XML SDK 2.5 for Microsoft Office下载连接 在安装了 Open XML SDK 2.5 之后,在项目或应用程序中,添加对以下组件的引

利用 js-xlsx 实现 Excel 文件导入并解析Excel数据成json格式的数据并且获取其中某列数据

演示效果参考如下:XML转JSON 另一个搭配SQL实现:http://sheetjs.com/sexql/index.html 详细介绍: 1.首先需要导入js <script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script> 2.导入文件框 这里importExcel(this)是方法,名字可以自己定义. <input type="file"onchang

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与

上传excel数据到数据库中

上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../upload/disposeFlightData" method="post"> <input id="disposeFlightDataButton" type="submit" value="处理航班数据"

高效快速导入EXCEL数据

需求1.高效率的以excel表格的方式导入多条数据.2.以身份证号为唯一标识,如果身份证号已存在,则该条数据不导入. 分析刚开始的时候是传统的做法,解析excel数据,获取单个对象,判断身份证是否已存在表中,若没有则插入数据库.否则pass结果数据才几百条的时候,导数据都花了10分钟才导入完毕.实在太慢了,看来在程序中做数据的校验很脑残. 优化在插入数据库之前作判断太花时间,没必要.所以最后将数据的处理交给了数据库来做.建一个临时表CUST_OBJECT_TEMP,先把所有的数据都用 jdbc

解析Excel文件并把数据存入数据库

前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致总报同一个错,最后在同学的帮助下顺利解决,下面我把自己用"POI"解析的方法总结出来供大家参考(我用的是SpingMVC和hibernate框架). 1.web.xml中的配置文件 web.xml中的配置文件就按照这种方式写,只需要把"application.xml"换

框架 day50 BOS项目 4 批量导入(ocupload插件,pinyin4J)/POI解析Excel/Combobox下拉框/分区组合条件分页查询(ajax)/分区数据导出(Excel)

知识点: 批量导入(ocupload插件,pinyin4J /POI解析Excel(apache POI) /区域分页查询 /Combobox下拉框 /分区组合条件分页查询(ajax) /分区数据导出(Excel下载) BOS项目笔记第4天 1.    区域批量导入功能 *Ajax不支持文件上传. *上传并且不刷新上传页面原理: Target到一个0,0,0的隐藏iframe里,造成一个没有刷新的假象 <form target="myIframe" action="ab

java 后台解析excel上传数据 工具类

后台调用: MultipartFile file: List<String[]> excelDate package com.holike.crm.partner.sys; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.apache.poi.h