使用poi讀寫Excel

       對於一個程序員來講,文件操做是常常遇到的,尤爲是對Excel文件的操做。java


       在這裏介紹一下我在項目中用到的一個操做Excel的工具——POI。關於POI的一些概念,網絡上不少,詳細信息你們能夠自行百度,我在這裏只作簡單介紹。POI是apache的類庫,主要是爲java開發人員提供對Office文件(word、ppt、Excel)處理的支持。我這裏主要給出幾個例子來講明演示一下。程序員


       準備工做apache

       我用的版本是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();
    }
  }
}
       效果圖以下:

       怎麼樣,很簡單吧。只要你使用了poi,無論你有沒有安裝Office,均可以完美的操做Office文件,小夥伴們,都快來試試看吧。


版權聲明:本文爲博主原創文章,未經博主容許不得轉載。dom

相關文章
相關標籤/搜索