Пример #1
0
  /**
   * 全シートのセルの値を取得します
   *
   * @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;
  }