Jakarta POI
多数の同一形式のExcelからデータを抜き出して別のExcelへ、という作業があったので、Jakarta POIを使ってみた。結構簡単に使えて、単純作業から解放されるので、かなり便利に感じた。Javaだとコンパイルの手間があるので、PerlやRubyでは同じことはできるのだろうか。
以下がソース。とりあえず動作すれば良かったので、式やセルの書式の扱いなどは調べ切れていない。
import java.util.Iterator; import java.util.Date; import java.io.FileInputStream; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFDateUtil; /** * Excelの必要な部分を表示します。 */ public class PickExcel { public static void main(String[] args) throws Exception { for (int i = 0; i < args.length; i++) { HSSFWorkbook workBook = new HSSFWorkbook(new FileInputStream(args[i])); System.out.println("file: " + args[i]); for (int s = 0; s < workBook.getNumberOfSheets(); s++) { System.out.println("SheetName: " + workBook.getSheetName(s)); HSSFSheet sheet = workBook.getSheetAt(s); // D4 セル printCell('D', 4, sheet); // O9 セル printCell('O', 9, sheet); // V11 セル printCell('V', 11, sheet); System.out.print("\n"); } } } private static void printCell(char cellpos, int rowpos, HSSFSheet sheet) { HSSFRow row = sheet.getRow(rowpos-1); HSSFCell cell = row.getCell( (short)(cellpos - 'A')); switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: case HSSFCell.CELL_TYPE_FORMULA: double numval = cell.getNumericCellValue(); System.out.print(numval); break; case HSSFCell.CELL_TYPE_STRING: default: String strval = cell.getStringCellValue(); System.out.print(strval); break; } System.out.print("\t"); } }