2017-05-30 13 views
0

ここにデータを読み込む列Reference Idが故に、スキップされ、1回の左シフトが起きている間に、Event modelXSSFReaderに欠けている細胞を処理する方法ApacheのポイとSheetContentsHandler

Id   Reference Id Name 
20059136     Gj 
20Am 

次のExcelの表を考えてみましょうName列のすべての値は、読み取り出力でReference Idに加算されます。

Apache POI 'XssfReader'と 'SheetContentsHandler'を使用して、欠落しているセルまたは空白/空白セルを見つける方法。

  1. 非常に大きなファイル読み取りの場合、missing cellsを動的に見つける方法はありますか?
  2. 「イベントモデル」の場合は、MissingCellPolicyを追加する方法と同じですか?

参照

  1. https://stackoverflow.com/a/36776914/4522875
  2. https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java

感謝。このことができ

+1

Apache POIサンプルパッケージで[XLSX2CSV]を読んでください(https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/eventusermodel)。 /XLSX2CSV.java)を検索し、 '私たちはどんな細胞も見逃しましたか? 'を探します。欠けている細胞のロジックはすべてそこにあります! – Gagravarr

+0

私のケースでは、いくつかのセル参照が欠落しています。上記の例では、読み込み出力から 'B2'を意味します。私が行インデックスを出力すると、次の出力に 'B2'がこのシーケンスで{A2 C2 D2}'が見つからないという結果が得られます。 – BalaajiChander

+1

すでに述べたように、紛失したセルを見つけるためのロジックを実装します。 ? 'には – Gagravarr

答えて

0

ホープ、ハックは、以下の方法を用いてcurrentRowを取得している

@Override 
    public void cell(String cellReference, String formattedValue, XSSFComment comment) { 
     if (currentRow == this.headerRow) { 
      // populate headers 
      populateHeaders(cellReference, formattedValue)); 
     } else if(currentRow > this.headerRow){ 
      // populate values based on position referencing particular header 
      final String header = headers.get(cellReference.replaceAll(String.valueOf(currentRow + 1), "") + this.headerRow); 
      values.put(header, formattedValue); 
     } 
    } 

@Override 
    public void startRow(int rowNum) { 
     currentRow = rowNum; 
     values = new LinkedHashMap<>(); 
    } 

とヘッダ位置を用いて抽出されたデータを移入、

 // populate values based on position referencing particular header 
     final String header = headers.get(cellReference.replaceAll(String.valueOf(currentRow + 1), "") + this.headerRow); 

欠落細胞可能性あとで自分の論理に基づいて空白、空白またはカスタム値でサニタイズする、ありがとう。