文档章节

工作记录:使用POI从excel导入数据(2003版本、2007以及以上版本)

阳光黑马
 阳光黑马
发布于 2015/04/22 16:37
字数 407
阅读 77
收藏 4

使用poi读取2007版本及以上的数据实例:

public List<KqRecord> readXlsx(String path) throws IOException {
        InputStream is = new FileInputStream(path);
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);//2007以上版本
        KqRecord kq = null;
        List<KqRecord> list = new ArrayList<KqRecord>();
        // Read the Sheet
        for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
            XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
            if (xssfSheet == null) {
                continue;
            }
            // Read the Row
            for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
                XSSFRow xssfRow = xssfSheet.getRow(rowNum);
                if (xssfRow != null) {
                    kq = new KqRecord();
                    //一个一个的读取
                    XSSFCell Id = xssfRow.getCell(0);
                    XSSFCell Kqid = xssfRow.getCell(1);
                    XSSFCell DeptName = xssfRow.getCell(2);
                    XSSFCell DeviceNmae = xssfRow.getCell(3);
                    XSSFCell Name = xssfRow.getCell(4);
                    XSSFCell CheckTime = xssfRow.getCell(5);
                    XSSFCell CheckType = xssfRow.getCell(6);
                    XSSFCell Validateflag = xssfRow.getCell(7);
                    XSSFCell SnId = xssfRow.getCell(8);
                    //对象设置值
                    kq.setId(getValue(Id));
                    kq.setKqid(getValue(Kqid));
                    kq.setDeptName(getValue(DeptName));
                    kq.setDeviceNmae(getValue(DeviceNmae));
                    kq.setName(getValue(Name));
                    kq.setCheckTime(getValue(CheckTime));
                    kq.setCheckType(getValue(CheckType));
                    kq.setValidateflag(getValue(Validateflag));
                    kq.setSnId(getValue(SnId));
                    list.add(kq);
                }
            }
        }
        return list;
    }
    @SuppressWarnings("static-access")
    private String getValue(XSSFCell xssfRow) {
        if (xssfRow.getCellType() == xssfRow.CELL_TYPE_BOOLEAN) {
            return String.valueOf(xssfRow.getBooleanCellValue());
        } else if (xssfRow.getCellType() == xssfRow.CELL_TYPE_NUMERIC) {
            return String.valueOf(xssfRow.getNumericCellValue());
        } else {
            return String.valueOf(xssfRow.getStringCellValue());
        }
    }

测试实例:

@Test
    public void testReadExcel(){
        try {
            List<KqRecord> readExcel = readExcel("D:/考勤记录表.xlsx");
            System.out.println(readExcel.size());
            System.out.println(readExcel);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public List<KqRecord> readExcel(String path) throws IOException {
        if (StringUtils.isBlank(path)) {
            return null;
        } else {
            return readXlsx(path);
        }
    }

使用poi读取2003excel数据的实例

public List<KqRecord> readXls(String path) throws IOException {
        InputStream is = new FileInputStream(path);
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
        KqRecord kq = null;
        List<KqRecord> list = new ArrayList<KqRecord>();
        // Read the Sheet
        for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
            if (hssfSheet == null) {
                continue;
            }
            // Read the Row
            for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                if (hssfRow != null) {
                    kq = new KqRecord();
                    HSSFCell no = hssfRow.getCell(0);
                    HSSFCell name = hssfRow.getCell(1);
                    HSSFCell age = hssfRow.getCell(2);
                    HSSFCell score = hssfRow.getCell(3);
                    kq.setId(getValue(no));
                    kq.setKqid(getValue(name));
                    kq.setDeptName(getValue(age));
                    kq.setDeviceNmae(getValue(score));
                    list.add(kq);
                }
            }
        }
        return list;
    }
 
    private String getValue(HSSFCell hssfCell) {
        if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
            return String.valueOf(hssfCell.getBooleanCellValue());
        } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
            return String.valueOf(hssfCell.getNumericCellValue());
        } else {
            return String.valueOf(hssfCell.getStringCellValue());
        }
}

测试数据与之前一样。。

参考文章; http://www.cnblogs.com/hongten/p/java_poi_excel_xls_xlsx.html

© 著作权归作者所有

共有 人打赏支持
阳光黑马
粉丝 9
博文 21
码字总数 11705
作品 0
海淀
程序员
私信 提问
POI - 读取Excel2003、Excel2007或更高级的兼容性问题

我们使用POI中的HSSFWorkbook来读取Excel数据。 上边代码,读取Excel2003(xls)的文件没问题,但是一旦读取的是Excel2007(xlsx)的文件,就会报异常:“The supplied data appears to be i...

技术小美
2017/11/14
0
0
Excel解析与数据生成(支持JXL,POI)

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

皮蛋猫
2013/02/01
0
0
在云端-看世间变幻/fluentexcel

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

在云端-看世间变幻
2015/02/18
0
0
Java Web之POI操作Excel2016模板

由于要批量生成Excel,并且模板已经给定。所以尝试用POI来操作一下。由于自己用的Office版本大于2007,所以在操作的时候遇到各种坑,特此记录一下~~~ 注意点 1、由于POI对于Office2003和200...

YungFan
2017/08/28
0
0
POI 读取 Excel 文件(2003版本与2007版本的差异之处)

已整理成完整项目,并进行了优化。看参考地址: https://gitee.com/andylongjie/exceltools 或者 https://github.com/youmulongjie/exceltools 我们在做用POI读物 Excel文件时,往往会忽略了...

Andy市民
2015/08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式学习最佳实践:从分布式系统的特征开始(附思维导图)

什么是分布式系统 回到顶部   分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法...

dragon_tech
14分钟前
2
0
TOKEN设计

TOKEN设计 Api_Token 首先需要知道API是什么? API(Application Programming Interface)即应用程序接口。你可以认为 API 是一个软件组件或是一个 Web 服务与外界进行的交互的接口。而我们在...

DrChenXX
23分钟前
1
0
浅谈“李氏代换”——从纪念金庸和斯坦李说起

李氏代换(LSP)简介 李氏代换是软件设计的一个原则,又名依赖倒转原则或依赖倒置原则,其衍生原则有接口分离原则等。该原则由Barbara Liskov于1988年提出。 该原则指出,程序中高级别的元素...

SamYjy
40分钟前
23
0
JavaScript实现在线websocket WSS测试工具 -toolfk程序员工具网

本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果。T...

toolfk
59分钟前
1
0
linux-scp 远程拷贝报错原因

刚拿到一台重装后的服务器,远程ssh都正常,但是一scp拷贝东西就报错: 本地确定是有scp命令的,而且如果是本地没有scp不会报后面那句lost connection,因此就是远程没有scp这个命令。因此在...

linuxprobe16
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部