/** * 全シートのセルの値を取得します * * @param excelFilePath Excelファイルのパス * @param reader リーダー * @param worksheetNames ワークシート名 * @return 全シートの値を持つリスト */ private static List<Table<String>> correctValues( String excelFilePath, XSSFReader reader, Map<String, String> worksheetNames) { // 1ファイル分の情報を集めるインスタンス List<Table<String>> workbookContent = new ArrayList<>(); // ブックでシェアしている値を取得する SharedStringsTable sst = null; try { sst = reader.getSharedStringsTable(); } catch (InvalidFormatException | IOException e) { throw new JadegreenException(e); } // シートのパーサ XMLReader worksheetParser = null; Table<String> worksheetContent = null; SxssfWorksheetValueHandler worksheetHandler = null; InputStream worksheetIs = null; for (Entry<String, String> entry : worksheetNames.entrySet()) { LOGGER.debug("対象Sheet:" + entry.getValue()); // シートのパーサを取得 worksheetContent = new LazyTable<>(); worksheetContent.setOption("bookName", excelFilePath); worksheetContent.setOption("sheetName", entry.getValue()); worksheetHandler = new SxssfWorksheetValueHandler(sst, worksheetContent); worksheetParser = new SAXParser(); worksheetParser.setContentHandler(worksheetHandler); try { // rIdでシートのInputStreamを取得 worksheetIs = reader.getSheet(entry.getKey()); InputSource sheetSource = new InputSource(worksheetIs); // シートをパース worksheetParser.parse(sheetSource); // パース下結果をbookContentへ追加 workbookContent.add(worksheetContent); } catch (InvalidFormatException | SAXException | IOException e) { throw new JadegreenException(e); } finally { try { worksheetIs.close(); } catch (IOException e) { // クローズできない場合は無視 } } } return workbookContent; }
@Override public List<Object> capture(Table<String> table) { List<Object> values = new ArrayList<>(); int endRow = getEndRow(table); int endCol = getEndCol(table); for (int r = row; r < endRow; r++) { for (int c = col; c < endCol; c++) { String value = table.get(r - 1, c - 1); if (end == -1 && breakValues != null && breakValues.contains(value)) { // 終了条件がセルの値の場合 return values; } values.add(value); } } return values; }