文档章节

Excel解析支持2003和2007

 小鱼--
发布于 2017/05/25 16:28
字数 348
阅读 7
收藏 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
博文 17
码字总数 5400
作品 0
通州
程序员
Excel解析与数据生成(支持JXL,POI)

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

皮蛋猫
2013/02/01
0
0
关于java读取Excel的问题

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

marshalbin
2016/01/29
581
2
解析和生成Excel报表方法汇总::.NET发现之旅(七)

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

terryli
2010/08/12
0
0
在云端-看世间变幻/fluentexcel

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

在云端-看世间变幻
2015/02/18
0
0
电子表格文件读写控件Spreadsheet免费下载购买地址

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

yidongkaifa
2014/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
1
0
12.17 Nginx负载均衡

Nginx负载均衡 下面的dig看到可以返回2个IP,就是解析出来的IP,这样我们可以做负载均衡。 dig www.qq.com 1.vim /usr/local/nginx/conf/vhost/fuzai.conf 2.添加如下配置 upstream qq //定义...

芬野de博客
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部