Apache POIで2003形式(xls)と2007形式(xlsx)の両方を使用する方法

Apache POIで2003形式(xls)と2007形式(xlsx)の両方を使用する方法

Javaでエクセルを扱うときはApache POIがメジャーだと思います。

Apache POIはこちらからダウンロードします。

Apache POIのバージョンが3.4くらい(確認したのは3.2)までだと2003以前のエクセルと2007のエクセルで、扱うライブラリが異なります。

2003(org.apache.poi.hssf.~)
2007(org.apache.poi.xssf.~)

Apache POIのバージョンが3.5から、2003と2007の両方を扱えるライブラリが用意されています。

2003 or 2007(org.apache.poi.ss.~)

org.apache.poi.ss.usermodel.Cellの定数

Cellクラスには以下のstatic定数があります。

CELL_TYPE_NUMERIC
CELL_TYPE_STRING
CELL_TYPE_FORMULA
CELL_TYPE_BLANK
CELL_TYPE_BOOLEAN
CELL_TYPE_ERROR

以下、使用例です。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class ApachePoi {

  /**
    * @param args
    * @throws IOException
    * @throws FileNotFoundException
    * @throws InvalidFormatException
  */
  public static void main(String[] args) throws FileNotFoundException, IOException, InvalidFormatException {

    Workbook wb = WorkbookFactory.create(new FileInputStream("D:\\sample.xlsx"));
    Sheet sheet = wb.getSheet("Sheet1");

    for (Row row : sheet) {
      for (Cell cell : row) {
        System.out.println(getCellValue(cell, "yyyy/MM/dd"));
      }
    }
  }

  public static Object getCellValue(Cell cell,String date) {
    switch (cell.getCellType()) {

      case Cell.CELL_TYPE_STRING:
        return cell.getRichStringCellValue().getString();

      case Cell.CELL_TYPE_NUMERIC:
        if (DateUtil.isCellDateFormatted(cell)) {
          Date dateValue = cell.getDateCellValue();
          DateFormat dateFormat = new SimpleDateFormat(date);
          return dateFormat.format(dateValue);
        } else {
          return cell.getNumericCellValue();
        }

      case Cell.CELL_TYPE_BOOLEAN:
        return cell.getBooleanCellValue();

      case Cell.CELL_TYPE_FORMULA:
        return cell.getCellFormula();

      default:
        return null;
    }
  }
}

POIで必要なライブラリ

poi-bin-3.16-20170419.zipをダウンロードして、不要なjarもあります。

必要なjarは以下になります。

poi-3.16.jar
poi-ooxml-3.16.jar
poi-ooxml-schemas-3.16.jar
ooxml-libフォルダ配下に存在するxmlbeans-2.6.0.jar

コメント

タイトルとURLをコピーしました