apache poi 3.1を使用して数式セル値(データ)を取得する方法

user2097135

アプリケーションでApachepoi-3.1-FINAL-20080629を使用しています。ここで、数式の使用に1つの問題があります...

私のセルには数式(sheet2!C10)があり、このセル内のデータは文字列型($ 3,456など)です...そのセルにアクセスする方法も数式を表示したいと考えています。

私のコードは次のようになります:

HSSFWorkbook wb = new HSSFWorkbook(file);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet, wb);

Iterator rows = sheet.rowIterator();
    while (rows.hasNext()) {
        HSSFRow row = (HSSFRow) rows.next();
        System.out.println("\n");
        Iterator cells = row.cellIterator();
        while (cells.hasNext()) {

            HSSFCell cell = (HSSFCell) cells.next();

            int cellType = cell.getCellType();

            if (HSSFCell.CELL_TYPE_NUMERIC == cellType)
                System.out.print(cell.getNumericCellValue() + "     ");
            else if (HSSFCell.CELL_TYPE_STRING == cellType)
                System.out.print(cell.getStringCellValue() + "     ");
            else if (HSSFCell.CELL_TYPE_BOOLEAN == cellType)
                System.out.print(cell.getBooleanCellValue() + "     ");
            else if (HSSFCell.CELL_TYPE_BLANK == cellType)
                System.out.print("BLANK     ");
            else if (HSSFCell.CELL_TYPE_FORMULA == cellType) {
                System.out.print(evaluator.evaluateInCell(cell).toString()  );              }   else 
                System.out.print("Unknown cell type " + cellType);

        }

    }

evaluator.evaluateInCell(cell).toString()がnullポインター例外をスローしています。助けてください!!!

Gagravarr

さて、最初に、Apache POI3.1はかなり古いです。手がかりは瓶の名前にあります- poi-3.1-FINAL-200806292008年からの日付なので、6年前です!アップグレードする価値は十分にあります。それ以降のバグ修正数はかなり膨大です。

あなたの問題に関しては、私はあなたが電話をかけたくないとかなり確信していますevaluator.evaluateInCellそれはほとんど決して正しい呼び出し方法ではありません

数式セルで何をしたいかに応じて、3つのオプションを利用できます。

数式文字列が欲しい

コールCell.getCellFormulaあなたは、式の文字列が返されます

Excelで計算された最後の数式値が欲しい

Excelがファイルを書き出すとき、通常、数式の最後に評価された値をキャッシュに保存して、すばやくすばやく開くことができるようにします。存在する場合は、ApachePOIからこれを読むことができます。これは単なるキャッシュであるため、常に正しいとは限りませんが、通常は正しいです。

Cell.getCachedFormulaResultTypeを呼び出してからそれをオンにし、通常のゲッターを使用して値を読み取る必要があります。

int cellType = cell.getCellType();
handleCell(cell, cellType);

private void handleCell(Cell cell, int cellType) {
        if (HSSFCell.CELL_TYPE_NUMERIC == cellType)
            System.out.print(cell.getNumericCellValue() + "     ");
        else if (HSSFCell.CELL_TYPE_STRING == cellType)
            System.out.print(cell.getStringCellValue() + "     ");
        else if (HSSFCell.CELL_TYPE_BOOLEAN == cellType)
            System.out.print(cell.getBooleanCellValue() + "     ");
        else if (HSSFCell.CELL_TYPE_BLANK == cellType)
            System.out.print("BLANK     ");
        else if (HSSFCell.CELL_TYPE_FORMULA == cellType)
            handleCell(cell, cell.getCachedFormulaResultType());
        else 
            System.out.print("Unknown cell type " + cellType);
   }

ApachePOIで数式の結果を計算してほしい

ここでの最善の策は、FormulaEvaluatorオブジェクトを取得し、evaluateを呼び出すことです。

FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();

// suppose your formula is in B3
CellReference cellReference = new CellReference("B3"); 
Row row = sheet.getRow(cellReference.getRow());
Cell cell = row.getCell(cellReference.getCol()); 

CellValue cellValue = evaluator.evaluate(cell);

switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
    System.out.println(cellValue.getBooleanValue());
    break;
case Cell.CELL_TYPE_NUMERIC:
    System.out.println(cellValue.getNumberValue());
    break;
case Cell.CELL_TYPE_STRING:
    System.out.println(cellValue.getStringValue());
    break;
case Cell.CELL_TYPE_BLANK:
    break;
case Cell.CELL_TYPE_ERROR:
    break;

// CELL_TYPE_FORMULA will never happen
case Cell.CELL_TYPE_FORMULA: 
    break;
}   

ApacheのPOI式の評価ページには、これらのすべての詳細を持っています

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Apache POIを使用して数式セルをキャッシュする方法

分類Dev

関数式Apache POIを取得する方法

分類Dev

Apache Poi Date値

分類Dev

Apache POIを使用してピボットデータフィールドの数値形式を設定する方法

分類Dev

Apache Poiを使用してExcelシートからセル値を取得する

分類Dev

Apache POI:数式FormulaEvaluatorを使用してセル値を読み取るときに数式が削除されます

分類Dev

Apache POI評価式

分類Dev

Apache POIを使用してすべてのセル値を読み取る方法

分類Dev

Apache POIを使用してセル参照文字識別子でセルを取得する

分類Dev

Apache POIを使用してExcelセルからデータ検証をプルする

分類Dev

Apache POIを使用してExcelでセルを結合する

分類Dev

ApacheのPOIを使用してループ配列データ

分類Dev

Apache POI-NoclassDefErrorを与える

分類Dev

Apache POI を使用して Excel から通貨コードを取得する方法は?

分類Dev

Apache POI解析エラー

分類Dev

JavaとApache POIを使用してExcelでデータを読み書きする

分類Dev

apache-poiを介してExcelのセルの値を変更する

分類Dev

Apache POI-数値を整数として取得

分類Dev

Apache Poiの数式でExcelを保存する方法は?

分類Dev

Apache POIを使用してWordのテーブルセルに境界線付きの画像を追加する方法

分類Dev

Apache POIを使用してHSSFWorkbookをXSSFWorkbookに変換する方法

分類Dev

Apache POIを使用してaltChunk要素をXWPFDocumentに追加する方法

分類Dev

Apache POI を使用して上付き文字を追加する方法

分類Dev

Apache Poiを使用して子の形状の絶対位置を取得する方法

分類Dev

Apache POIを使用してExcelシートをコピーする

分類Dev

Apache POIを使用してExcelファイルから列を取得するには

分類Dev

Apache POIを使用してExcelファイルで列の名前を取得する

分類Dev

Apache POIを使用してExcelシートを削除する

分類Dev

Apache POIを使用してExcelチャートを作成する

Related 関連記事

  1. 1

    Apache POIを使用して数式セルをキャッシュする方法

  2. 2

    関数式Apache POIを取得する方法

  3. 3

    Apache Poi Date値

  4. 4

    Apache POIを使用してピボットデータフィールドの数値形式を設定する方法

  5. 5

    Apache Poiを使用してExcelシートからセル値を取得する

  6. 6

    Apache POI:数式FormulaEvaluatorを使用してセル値を読み取るときに数式が削除されます

  7. 7

    Apache POI評価式

  8. 8

    Apache POIを使用してすべてのセル値を読み取る方法

  9. 9

    Apache POIを使用してセル参照文字識別子でセルを取得する

  10. 10

    Apache POIを使用してExcelセルからデータ検証をプルする

  11. 11

    Apache POIを使用してExcelでセルを結合する

  12. 12

    ApacheのPOIを使用してループ配列データ

  13. 13

    Apache POI-NoclassDefErrorを与える

  14. 14

    Apache POI を使用して Excel から通貨コードを取得する方法は?

  15. 15

    Apache POI解析エラー

  16. 16

    JavaとApache POIを使用してExcelでデータを読み書きする

  17. 17

    apache-poiを介してExcelのセルの値を変更する

  18. 18

    Apache POI-数値を整数として取得

  19. 19

    Apache Poiの数式でExcelを保存する方法は?

  20. 20

    Apache POIを使用してWordのテーブルセルに境界線付きの画像を追加する方法

  21. 21

    Apache POIを使用してHSSFWorkbookをXSSFWorkbookに変換する方法

  22. 22

    Apache POIを使用してaltChunk要素をXWPFDocumentに追加する方法

  23. 23

    Apache POI を使用して上付き文字を追加する方法

  24. 24

    Apache Poiを使用して子の形状の絶対位置を取得する方法

  25. 25

    Apache POIを使用してExcelシートをコピーする

  26. 26

    Apache POIを使用してExcelファイルから列を取得するには

  27. 27

    Apache POIを使用してExcelファイルで列の名前を取得する

  28. 28

    Apache POIを使用してExcelシートを削除する

  29. 29

    Apache POIを使用してExcelチャートを作成する

ホットタグ

アーカイブ