zoukankan      html  css  js  c++  java
  • 使用poi读写Excel

           对于一个程序猿来说,文件操作是常常遇到的,尤其是对Excel文件的操作。


           在这里介绍一下我在项目中用到的一个操作Excel的工具——POI。关于POI的一些概念。网络上非常多,具体信息大家能够自行百度。我在这里仅仅做简介。

    POI是apache的类库,主要是为java开发者提供对Office文件(word、ppt、Excel)处理的支持。我这里主要给出几个样例来说明演示一下。


           准备工作

           我用的版本号是3.10.1,须要的jar有:

    • dom4j.jar
    • log4j-1.2.13.jar
    • poi-3.10.1-20140818.jar
    • poi-ooxml-3.10.1-20140818.jar
    • poi-ooxml-schemas-3.10.1-20140818.jar
    • poi-scratchpad-3.10.1-20140818.jar
           代码演示样例1.读取Excel
    public void testReadExcel() {
      try {
        // 读取Excel
        Workbook wb = new HSSFWorkbook(new FileInputStream("d:\2.xls"));
    
        // 获取sheet数目
        for (int t = 0; t < wb.getNumberOfSheets(); t++) {
          Sheet sheet = wb.getSheetAt(t);
          Row row = null;
          int lastRowNum = sheet.getLastRowNum();
    
          // 循环读取
          for (int i = 0; i <= lastRowNum; i++) {
            row = sheet.getRow(i);
            if (row != null) {
              // 获取每一列的值
              for (int j = 0; j < row.getLastCellNum(); j++) {
                Cell cell = row.getCell(j);
                String value = getCellValue(cell) ;
                if(!value.equals("")){
                  System.out.print(value + " | ");
                }
              }
              System.out.println();
            }
          }
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
          用到了一个方法:
    /***
     * 读取单元格的值
     * 
     * @Title: getCellValue
     * @Date : 2014-9-11 上午10:52:07
     * @param cell
     * @return
     */
    private String getCellValue(Cell cell) {
      Object result = "";
      if (cell != null) {
        switch (cell.getCellType()) {
        case Cell.CELL_TYPE_STRING:
          result = cell.getStringCellValue();
          break;
        case Cell.CELL_TYPE_NUMERIC:
          result = cell.getNumericCellValue();
          break;
        case Cell.CELL_TYPE_BOOLEAN:
          result = cell.getBooleanCellValue();
          break;
        case Cell.CELL_TYPE_FORMULA:
          result = cell.getCellFormula();
          break;
        case Cell.CELL_TYPE_ERROR:
          result = cell.getErrorCellValue();
          break;
        case Cell.CELL_TYPE_BLANK:
          break;
        default:
          break;
        }
      }
      return result.toString();
    }
           解释一下,首先将文件读入到工作簿Workbook中,Workbook是一个接口,他有2个实现:HSSFWorkbook和XSSFWorkbook。前者是用来读取97-03版的Excel,扩展名为xls。后者是读取07及以后的版本号。扩展名为xlsx。

    读入到workbook中,然后循环全部的sheet。在sheet循环全部的有效行和有效列。当中sheet.getLastRowNum()获得最后一行的索引值(从0開始),而sheet.getPhysicalNumberOfRows()则是获取的最后一行的行号(从1開始)。这里要注意的是循环列不是在sheet中循环。而是在row中循环。


           效果图例如以下:



           代码演示样例2. 写入Excel文件
    public void testWriteExcel() {
      String excelPath = "d:/3.xls";
    
      Workbook workbook = null;
      try {
        // XSSFWorkbook used for .xslx (>= 2007), HSSWorkbook for 03 .xsl
        workbook = new HSSFWorkbook();// XSSFWorkbook();//WorkbookFactory.create(inputStream);
      } catch (Exception e) {
        System.out.println("创建Excel失败: ");
        e.printStackTrace();
      }
      if (workbook != null) {
        Sheet sheet = workbook.createSheet("測试数据");
        Row row0 = sheet.createRow(0);
        for (int i = 0; i < 6; i++) {
          Cell cell = row0.createCell(i, Cell.CELL_TYPE_STRING);
          cell.setCellValue("列标题" + i );
          //sheet.autoSizeColumn(i);//自己主动调整宽度
        }
        for (int rowNum = 1; rowNum < 10; rowNum++) {
          Row row = sheet.createRow(rowNum);
          for (int i = 0; i < 6; i++) {
            Cell cell = row.createCell(i, Cell.CELL_TYPE_STRING);
            cell.setCellValue("单元格" + String.valueOf(rowNum + 1)
                + String.valueOf(i + 1));
          }
        }
        try {
          FileOutputStream outputStream = new FileOutputStream(excelPath);
          workbook.write(outputStream);
          outputStream.flush();
          outputStream.close();
        } catch (Exception e) {
          System.out .println("写入Excel失败: ");
          e.printStackTrace();
        }
      }
    }
    
           效果图例如以下:

           怎么样,非常easy吧。仅仅要你使用了poi,无论你有没有安装Office,都能够完美的操作Office文件。小伙伴们。都快来试试看吧。



  • 相关阅读:
    设计模式学习笔记之一:策略模式
    向上转型和向下转型
    html readonly和disabled的区别
    如何自定义JSR-303标准的validator
    vue 组件属性props,特性驼峰命名,连接线使用
    laydate中设置动态改变max与min值的方法
    浅谈JS中 reduce() 的用法
    jq 实时监听input输入框的变化
    npm install --save 和 npm install -d的区别
    vue中html、js、vue文件之间的简单引用与关系
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6751503.html
Copyright © 2011-2022 走看看