解説動画
今回は、Eclipseに作ったMavenプロジェクトで、Excelシートを読み取るアプリケーションを作成します。
■動画はこちら
■Youtube版の解説で使用しているソースコード
動画と一緒にこちらも参考にどうぞ。
ここでは、数式の処理の部分で、さらに処理を分けています。
ただ、printメソッドの先頭や、呼び出す前で数式を判断してしまえば、もう少しスマートになりますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | package poi; import java.io.File; import java.io.FileInputStream; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.FormulaEvaluator; 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 ExelFileReadTest { public static void main(String[] args) { try { File file = new File("d:\\work\\読み取りサンプル.xlsx"); try(FileInputStream inputStream = new FileInputStream(file); Workbook workbook = WorkbookFactory.create(inputStream)){ Sheet sheet = workbook.getSheetAt(0); //直接入力のセルを取得(3行目から8行目のE列) print(workbook,sheet,2,4); print(workbook,sheet,3,4); print(workbook,sheet,4,4); print(workbook,sheet,5,4); print(workbook,sheet,6,4); print(workbook,sheet,7,4); //数式のセルを取得(9行目のF列) print(workbook,sheet,8,5); } } catch (Exception e) { e.printStackTrace(); } } private static void print(Workbook workbook,Sheet sheet,int r,int c) { //引数の行,列でシートからセルを取得 Row row = sheet.getRow(r); Cell cell = row.getCell(c); CellType cType = cell.getCellType(); //セル値の取得 if(cType == CellType.BLANK) { //ブランクのセル System.out.println("[BLANK]"); } else if(cType == CellType.STRING) { //文字列のセル System.out.println(cell.getStringCellValue()); } else if(cType == CellType.NUMERIC) { if(DateUtil.isCellDateFormatted(cell)) { //日付のセル System.out.println(cell.getDateCellValue()); } else { //数値のセル System.out.println(cell.getNumericCellValue()); } } else if(cType == CellType.BOOLEAN) { //真偽値のセル System.out.println(cell.getBooleanCellValue()); } else if(cType == CellType.ERROR) { //エラーのセル System.out.println(cell.getErrorCellValue()); } else if(cType == CellType.FORMULA) { //数式のセル //数式セルの場合、数式を評価したセル値のセルタイプごとに値と数式を表示 FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); CellType cvType = evaluator.evaluate(cell).getCellType(); if(cvType == CellType.BLANK) { //ブランクのセル System.out.println("[BLANK]"); } else if(cvType == CellType.STRING) { //数式の結果は、文字列 System.out.println(cell.getStringCellValue() + "(" + cell.getCellFormula() + ")"); } else if(cvType == CellType.NUMERIC) { if(DateUtil.isCellDateFormatted(cell)) { //数式の結果は、日付 System.out.println(cell.getDateCellValue() + "(" + cell.getCellFormula() + ")"); } else { //数式の結果は、数値 System.out.println(cell.getNumericCellValue() + "(" + cell.getCellFormula() + ")"); } } else if(cvType == CellType.BOOLEAN) { //数式の結果は、真偽値 System.out.println(cell.getBooleanCellValue() + "(" + cell.getCellFormula() + ")"); } else if(cvType == CellType.ERROR) { //数式の結果は、エラー System.out.println(cell.getErrorCellValue() + "(" + cell.getCellFormula() + ")"); } } } } |