日々常々

ふつうのプログラマがあたりまえにしたいこと。

Excelファイルの全シートから値を引っ張り出す

何となくやってみたかったので。
ネタ的に使えそうなのは、SheetがIterableであり、RowがIterableであること。と言う事で、Sheetにある全てのCellを対象にしたい場合は、拡張for文を2つ重ねればいいのですっと。

import java.io.FileInputStream;

import org.apache.poi.ss.usermodel.Cell;
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 OutputAllCellValue {

  public static void main(String[] args) {
    try {
      Workbook book = WorkbookFactory.create(new FileInputStream("./temp/input.xls"));
      for (int i = 0; i < book.getNumberOfSheets(); i++) {
        Sheet sheet = book.getSheetAt(i);

        for (Row row : sheet) {
          for (Cell cell : row) {
            StringBuilder sb = new StringBuilder();
            sb.append("[").append(cell.getSheet().getSheetName()).append("]");
            sb.append(cell.getRowIndex()).append(":").append(cell.getColumnIndex());

            switch (cell.getCellType()) {
            case Cell.CELL_TYPE_NUMERIC:
              sb.append("[NUMRIC ]").append(cell.getNumericCellValue());
              break;
            case Cell.CELL_TYPE_STRING:
              sb.append("[STRING ]").append(cell.getStringCellValue());
              break;
            case Cell.CELL_TYPE_FORMULA:
              sb.append("[FORMULA]").append(cell.getCellFormula());
              break;
            case Cell.CELL_TYPE_BOOLEAN:
              sb.append("[BOOLEAN]").append(cell.getBooleanCellValue());
              break;
            case Cell.CELL_TYPE_ERROR:
              sb.append("[ERROR  ]").append(cell.getErrorCellValue());
              break;
            case Cell.CELL_TYPE_BLANK:
              continue;
            default:
              continue;
            }

            System.out.println(sb);
          }
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}