程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 使用poi讀寫Excel

使用poi讀寫Excel

編輯:C++入門知識

使用poi讀寫Excel


對於一個程序員來說,文件操作是經常遇到的,尤其是對Excel文件的操作。


在這裡介紹一下我在項目中用到的一個操作Excel的工具——POI。關於POI的一些概念,網絡上很多,詳細信息大家可以自行百度,我在這裡只做簡單介紹。POI是apache的類庫,主要是為java開發人員提供對Office文件(word、ppt、Excel)處理的支持。我這裡主要給出幾個例子來說明演示一下。


准備工作

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

dom4j.jarlog4j-1.2.13.jarpoi-3.10.1-20140818.jarpoi-ooxml-3.10.1-20140818.jarpoi-ooxml-schemas-3.10.1-20140818.jarpoi-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文件,小伙伴們,都快來試試看吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved