• 使用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文件。小伙伴们。都快来试试看吧。



  • 相关阅读:
    待解决问题集锦
    蓝桥杯--- 历届试题 连号区间数(水题)
    蓝桥杯---历届试题 翻硬币 (水题)
    nyoj 678 最小K个数之和
    hdoj 2 括号配对问题【数组模拟实现+STL实现】
    hdoj 1016 Prime Ring Problem
    nyoj 62 笨小熊
    nyoj 47 过河问题
    nyoj 456 邮票分你一半
    nyoj 171 聪明的kk
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6751503.html
Copyright © 2020-2023  润新知