解析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

时间: 12-07

解析Excel数据的相关文章

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文件并把数据存入数据库

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

java 解析excel,带合并单元的excel

首先,mavn导入jar包 <!-- 解析excel需要导入的 jar包    begin -->          <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactId>            <version>3.11</version>        </dep

转:java 解析excel,带合并单元的excel

收集了一些对博主有帮助的博文,如下 >>>>>>>>>>>第一部分: 首先,mavn导入jar包 <!-- 解析excel需要导入的 jar包    begin -->          <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactI

Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)

JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03  xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传的xls文件(文件格式见下user.xls),解析不为空的行与列,写入数据库. 文件user.xls格式为: 下面来看代码实例演示: 一.前端jsp页面(本来内容很多,这里精简了) <%@ page language="java" contentType="text/htm

Poi解析Excel

Poi解析Excel Poi包里有4个主要的类,包括: Workbook------工作表,通过WorkbookFactory的create(FileInputStream fis)方法获取, Sheet------------表格,Workbook实例的getSheetAt(int num)方法获取, Row--------------行,Sheet实例的getRow(int num)方法获取, Cell--------------单元格,Row实例的getCell(int num)方法获取,

java 解析excel

分析 解析Excel首先就要解析Excel的结构.然后用面向对象的思想分析一下  这是一个excel文件.下面我们就来分析一下如果让你写这个poi框架,那么你会怎么设计. 1. 首先要有一个对象表示这整个Excel文件. 2. 可是这个excel文件中有好多页.Sheet1, Sheet2等等,所以我们还需要一个对象表示页. 3. 在页中,有行,所以还需要一个对象表示行. 4. 在行中,最后细分到格cell. 5. 格cell中数据还有好多类型.有字符串,数字,时间等等. POI中的对象与exc

POI解析excel的漏洞(CVE-2014-3574)

一.概述 最早的时候,java开发人员在操作excel的时候,用的最多的框架应该是poi.jxl.随着office的不断发展,office2007开始支持openXML的协议,后续陆续出现了新的框架支持操作office,如docx4j等.openXML使得数据的结构.组成更加透明,可以通过一定的操作看到内部完整的结构,如果仔细研究内部的属性,还可以进行更深层次的操作.当然,有利有弊,这也在一定程度上带来了麻烦,因为文件可以随意的更改内部的组成,在一定程度上给相关系统造成麻烦. 二.excel20

SharePoint集成Excel数据和Excel Web Access Web部件

SharePoint集成Excel数据和Excel Web Access Web部件 Excel Web Access Web部件在SharePoint中Excel电子表单里呈现数据. 1. 打开Excel 2010.创建空白工作薄. 2. 添加数据. 3. 点击另存为,选择文档库,点击确定,选择文档,点击确定. 4. 也可以添加Web部件. 5. 编辑部件,输入Excel的URL. SharePoint集成Excel数据和Excel Web Access Web部件,布布扣,bubuko.co