Java 操作 Excel (读)

一个项目要求读Excel表格,于是Google、baidu查了查,看到不少关于Java读Excel到文章,讲解的比较详细。今天开博,第一篇文章,对Java读Excel进行一下总结,内容全都是来自网络,我只是做了一些修改、总结。经过挑选决定采用poi和fastexcel。

 

1、poi读取Excel (poi-3.2-FINAL-20081019)

 

        // 构造 HSSFWorkbook 对象,strPath 传入文件路径
        HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(strPath));
        // 读取文件中的第一张表格
        HSSFSheet sheet = wb.getSheetAt(0);
        // 定义 row、cell
        HSSFRow row;
        // HSSFCell cell;
        String cell;
        // 循环输出表格中的内容
        for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++) {
            row = sheet.getRow(i);
            for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++) {
                // 推荐通过 row.getCell(j).toString() 获取单元格内容,
                cell = row.getCell(j).toString();
                System.out.print(cell + "\t");
            }
            System.out.println("");
        }

 

2、fastexcel读Excel (fastexcel-0.2-2009-01-16)

 

        // 打开表格文件,strPath设置文件所在路径
        Workbook workBook = FastExcel.createReadableWorkbook(new File(strPath));
        workBook.open();

        // 基于事件的读取
//        workBook.getSheet(0, new SheetReadAdapter() {
//			public void onCell(int row, int col, String content) {
//				System.out.println(row + "," + col + "," + content);
//			}
//		});

        // 基本的读取
        // 操作第一张表格
        Sheet s = workBook.getSheet(0);
        // 设置 row、cell
        String[] row;
        String cell;
        // 循环输出表格内容
        for (int i = s.getFirstRow(); i < s.getLastRow(); i++) {
            row = s.getRow(i);
            for (int j = s.getFirstColumn(); j < s.getLastColumn(); j++) {
                cell = s.getCell(i, j);
                System.out.print(cell + "\t");
            }
            System.out.println("");
        }
        // 关闭连接
        workBook.close();

 

3、简单测试读取速度 (Intel(R) Pentium(R) Dual T2330  @ 1.60GHz 内存:2G)

 

        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SS");
        TimeZone t = sdf.getTimeZone();
        t.setRawOffset(0);
        sdf.setTimeZone(t);
        Long startTime = System.currentTimeMillis();
        // 检测代码
        String fileName = "F:\\我的文档\\专业实训\\07信管缴费代码.xls";
        try {
            // 性能更好,读取更快
            FastexcelReadExcel fre = new FastexcelReadExcel();
            fre.testFastExcel(fileName);
        } catch (Exception ex) {
            Logger.getLogger(FastexcelReadExcel.class.getName()).log(Level.SEVERE, null, ex);
        }
        Long endTime = System.currentTimeMillis();
        System.out.println("用时:" + sdf.format(new Date(endTime - startTime)));

        startTime = System.currentTimeMillis();
        // 检测代码
        try {
            PoiReadExcel er = new PoiReadExcel();
            er.testPoiExcel(fileName);
        } catch (Exception ex) {
            Logger.getLogger(FastexcelReadExcel.class.getName()).log(Level.SEVERE, null, ex);
        }
        endTime = System.currentTimeMillis();
        System.out.println("用时:" + sdf.format(new Date(endTime - startTime)));

 

fastexcel 读取用时:656ms,poi 读取用时:735ms。

Excel 表格 为 80行8列。

 

总结:poi是非常强大的,可以完成设置各种格式,但是相对的也可能更慢一些(猜测),fastexcel则更适合读取数据,不需要控制太多的格式,只是简单的读取。

两者的具体实现没有过深入的了解过。

对于读取Excel内容,导入数据库中,优先选用fasteexcel。

对于要求更高的格式控制,优先选用poi。

另外还有JXL等其他操作Excel的开源项目,没有使用过,感觉有以上两者已经足够。

对于office2007格式还没有研究,等待……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值