文档章节

Excel解析支持2003和2007

 小鱼--
发布于 2017/05/25 16:28
字数 348
阅读 7
收藏 0
点赞 0
评论 0
POI

解析代码如下:

public class ExcelUtil {
    private static final SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");

    public static List<Map<String, Object>> parseExcelInputStream(byte[] bytes, String[] properties) {
        List<Map<String, Object>> excelData = new ArrayList<Map<String, Object>>();
        //字节转为流
        InputStream is = new ByteArrayInputStream(bytes);
        try {

            //兼容Excel 2003/2007/2010 都是可以处理的
            Workbook workbook = WorkbookFactory.create(is);
            int sheetCount = workbook.getNumberOfSheets();//Sheet的数量

            //遍历每个Sheet
            for (int s = 0; s < sheetCount; s++) {
                Sheet sheet = workbook.getSheetAt(s);
                int rowCount = sheet.getPhysicalNumberOfRows(); //获取总行数
                //遍历每一行
                for (int r = 1; r < rowCount; r++) {
                    Map<String, Object> map = new HashMap<String, Object>();
                    Row row = sheet.getRow(r);
                    int cellCount = row.getPhysicalNumberOfCells(); //获取总列数
                    try {
                        //遍历每一列
                        for (int c = 0; c < cellCount; c++) {
                            Cell cell = row.getCell(c);
                            int cellType = cell.getCellType();
                            String cellValue = null;
                            switch (cellType) {
                                case Cell.CELL_TYPE_STRING: //文本
                                    cellValue = cell.getStringCellValue();
                                    break;
                                case Cell.CELL_TYPE_NUMERIC: //数字、日期
                                    if (DateUtil.isCellDateFormatted(cell)) {
                                        cellValue = yyyyMMdd.format(cell.getDateCellValue()); //日期型
                                    } else {
                                        cellValue = String.valueOf(cell.getNumericCellValue()); //数字
                                    }
                                    break;
                                case Cell.CELL_TYPE_BOOLEAN: //布尔型
                                    cellValue = String.valueOf(cell.getBooleanCellValue());
                                    break;
                                case Cell.CELL_TYPE_BLANK: //空白
                                    cellValue = cell.getStringCellValue();
                                    break;
                                case Cell.CELL_TYPE_ERROR: //错误
                                    cellValue = "error";
                                    break;
                                case Cell.CELL_TYPE_FORMULA: //公式
                                    cellValue = "error";
                                    break;
                                default:
                                    cellValue = "error";
                            }
                            if (cellValue == "error") {
                                System.out.println("###" + r + "行解析有问题,cellValue=" + cellValue);
                                continue;
                            }
                            map.put(properties[c], cellValue);
                        }
                    } catch (Exception e) {
                        System.out.println("解析excel" + r + "行数据出错" + e);
                    }
                    int nullNum = 0;
                    for (String key : map.keySet()) {
                        if (map.get(key) == null) {
                            nullNum += 1;
                        }
                    }
                    if (nullNum < map.size()) {
                        excelData.add(map);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return excelData;
    }
}

解读:

入参:bytes:要解析的二进制excel输入流
          properties:excel的sheet,每列的key值

返回:以properties数组中元素为key,sheet中每行单元格的值为value的List对象

如:

返回数据则为:

 

 

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 16
码字总数 5080
作品 0
通州
程序员
Excel解析与数据生成(支持JXL,POI)

最近项目中需要用到Excel解析与生成Excel,但现有系统中没有进行解析工具封装于是便封装一个Excel工具包,支持JXL工具包与POI工具包解析与生成数据,POI支持2003与2007。 Excel解析目前网上有...

皮蛋猫 ⋅ 2013/02/01 ⋅ 0

关于java读取Excel的问题

大家好,项目内用到java解析Excel的功能,我的问题有两个,向大家请教: 1、用jxl只能支持读取office2003及office以前的版本,不支持office2007之后的版本读取; 2、用poi虽然能同时支持off...

marshalbin ⋅ 2016/01/29 ⋅ 2

解析和生成Excel报表方法汇总::.NET发现之旅(七)

昨天在医院检查身体时,一个朋友打过来电话,咨询EXCEL报表开发都有哪些方法,他们要上一个有200多个不同格式Excel报表的项目,虽然在医院做全身检查中,我还是给他提供了几点建议。在这里我...

terryli ⋅ 2010/08/12 ⋅ 0

POI 读取 Excel 文件(2003版本与2007版本的差异之处)

我们在做用POI读物 Excel文件时,往往会忽略了Excel的版本,到底是2003还是2007。于是在读取或写入Excel文件时,用2003版本的Excel和用2007版本的Excel文件,会出现不兼容情况。抛出异常,大...

Andy市民 ⋅ 2015/08/31 ⋅ 0

电子表格文件读写控件Spreadsheet免费下载购买地址

GemBox.Spreadsheet是一款功能强大的.NET电子表格控件,使开发人员可以创建、读写和转换spreadsheet文件(XLS,CSV,XLSX,HTML或者ODS),并不需要安装Excel软件,全面支持Excel公式解析,全面兼...

yidongkaifa ⋅ 2014/09/26 ⋅ 0

在云端-看世间变幻/fluentexcel

##fluentexcel 简介 fluentexcel基于POI,旨在改进 excel 生成时的编码体验, 借鉴 fluent api 思想开发方便易用,同时书写方便的 excel 的 api。 更重要的是 fluentexcel 可以将一个 excel 20...

在云端-看世间变幻 ⋅ 2015/02/18 ⋅ 0

java poi 导入excel

所需jar包 poi package example.poi;import java.io.;import java.text.DecimalFormat;import org.apache.poi.hssf.usermodel.;import org.apache.poi.ss.usermodel.;import org.apache.poi......

JohnnyFu ⋅ 2014/11/21 ⋅ 0

数据导入导出工具--DataPie

DataPie支持SQL server、SQLite、ACCESS数据库的导入、导出、存储过程调用,支持EXCEL2007、EXCEL2003、ACCESS2007、 CSV文件导入数据库,支持EXCEL、CSV文件方式导出,支持数据拆分导出及自...

不锈的阳光 ⋅ 2012/02/04 ⋅ 0

EXCEL导入导出工具DataPieV3.7更新,大幅提升EXCEL导入ACCESS的效率

DataPie 托管地址:https://github.com/yfl8910/DataPie 功能:支持SQL server、SQLite、ACCESS数据库的导入、导出、存储过程调用,支持EXCEL2007、EXCEL2003、ACCESS2007、 CSV文件导入数据...

不锈的阳光 ⋅ 2014/06/03 ⋅ 6

DataPie V3.7.1 发布,新增csv文件导入功能

DataPie https://github.com/yfl8910/DataPie 功能:支持SQL server、SQLite、ACCESS数据库的导入、导出、存储过程调用,支持EXCEL2007、EXCEL2003、ACCESS2007、 CSV文件导入数据库,支持E...

不锈的阳光 ⋅ 2014/06/11 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Thrift RPC实战(二) Thrift 网络服务模型

TServer类层次体系 TSimpleServer/TThreadPoolServer是阻塞服务模型 TNonblockingServer/THsHaServer/TThreadedSelectotServer是非阻塞服务模型(NIO) 1 TServer抽象类的定义 内部静态类Args的...

lemonLove ⋅ 8分钟前 ⋅ 0

vim命令用法

第五章 vim命令 vim和vi几乎是一样的,唯一的区别就是当编辑一个文本时,使用vi不会显示颜色,而使用vim会显示颜色。 vim有三个模式:一般模式,编辑模式,命令模式。 系统最小化安装时没有安...

弓正 ⋅ 9分钟前 ⋅ 0

MyBatis源码解读之配置

1. 目的 本文主要介绍MyBatis配置文件解析,通过源码解读mybatis-config.xml(官方默认命名)、Mapper.xml 与Java对象的映射。 2. MyBatis结构 查看大图 MyBatis结构图,原图实在太模糊了,所以...

无忌 ⋅ 13分钟前 ⋅ 0

Ignite的jdbc与网格的连接方式的查询性能对比

环境: 数据量100万 Ignite2.5 Windows10 8g jdbc方式连接 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; i......

仔仔1993 ⋅ 28分钟前 ⋅ 0

收集自网络的wordpress 分页导航的代码教程(全网最全版)

wordpress 分页导航是用来切换文章的一个功能,添加了 wordpress 分页导航后,用户即可自由到达指定的页面数浏览分类文章,而这样的一个很简单功能却有很多朋友在用插件:WP-PageNavi,插件的...

Rhymo-Wu ⋅ 43分钟前 ⋅ 0

微服务 WildFly Swarm 入门

Hello World 就像前面章节中的其他框架一样,我们希望添加一些基本的 Hello-world 功能,然后在其上逐步添加更多的功能。让我们从在我们的项目中创建一个 HolaResources 开始。您可以使用您的...

woshixin ⋅ 50分钟前 ⋅ 0

Maven的安装和Eclipse的配置

1. 下载Maven 下载地址 2. 解压压缩包,放到自己习惯的硬盘中 此处我将其放到了 D:\Tools 目录下。 3. 配置环境变量 右键此电脑 -> 属性 -> 高级系统设置 -> 环境变量。 在系统变量中新建,变...

影狼 ⋅ 58分钟前 ⋅ 0

python pip使用国内镜像的方法

国内源 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://......

良言 ⋅ 58分钟前 ⋅ 0

对于url变化的spa应该如何使用微信jssdk

使用vue单页面碰上微信jssdk config验证失败的坑。第一次成功 之后切换页面全部失败,找到了解决方法,第一次验证成功后保存验证信息 切换页面时验证信息直接拿来用,加一个wx.error() 失败时...

孙冠峰 ⋅ 今天 ⋅ 0

Spring Cloud Gateway 一般集成

SCF发布,带来很多新东西,不过少了点教程,打开方式又和以前的不一样,比如这个SCG,压根就没有入门指导,所以这里写一个,以备后用。 一、集成 pom.xml <dependency> <groupI...

kut ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部