2012-05-10 27 views
1

私たちはapache poi 3.8を使用してExcelを解析しています。隠された行は、ユースケースに迷惑データが含まれている傾向があるため、検出する必要があります(スキップする必要があります)。apache poiを使用してExcelの隠しセルを検出

動作するはずと思われる:

row.isFormatted() && row.getRowStyle().getHidden() 

しかし、任意の行レベルフォーマットがあるように見えることはありません(getRowStyle()は常にnullを返します)。

for (int i = 0; i < row.getLastCellNum(); i++) { 
    Cell cell = row.getCell(i); 
    if (cell != null && cell.getCellStyle() != null && cell.getCellStyle().getHidden()) 
     ... 

しかし、すべての行のために、我々は(ループの上記のカスタム出力)を取得:

Cell 0 is not hidden [email protected]/false 

はない「getHiddenを()」ではない、我々はセルスタイルをチェックすることがうまくいくかもしれないと思った最後の手段として、私が思うように働かないのですか?隠れた行を検出する別の方法はありますか? (非表示の列も素晴らしいボーナスになりますが、関連性の低いATMは少しあります)

答えて

5

getRowStyleは通常想定通りに動作します。非表示の行は高さがrow.getHeight()またはrow.getZeroHeight()を使用して0 に設定している傾向があるよう

そうしないと、あなたは、行の高さを確認することができます。

+0

隠し行の場合、 'hidden'は' true'に設定されますが、明示的に設定されない限り、 'row.getHeight()'は常にゼロでないデフォルトのワークシート値を返します。私たちは 'row.getZeroHeight()'に頼ることができます –

+0

getZeroHeight()は私が今直面している用途のために働きます。そのように私の問題は解決されますが、 "getRowStyle()"はまだ動作しません。私はあなたの応答に適切な答えとしてフラグを立てるべきですか、あるいはいくつかがgetRowStyle()の問題についていくつかのフィードバックを与えるまで待ちますか? (私はむしろstackoverflowで新しくなっています) – nablex

+0

通常、行スタイルはPOIによって正しくロードされるはずです。したがって、 'getRowStyle()。getHidden()'が動作するはずです。それとも私は思う。私は安全に 'getZeroHeight()'に頼ることができると思います。適切な答えのために私は知らない。あなたの好きなように – Alex

2

いくつかの方法を試した後、row.getZeroHeight()は、隠れた行を識別するために正しく機能しました。また、Apache POI < = 3.7バージョンに固執している人にとっては、これが唯一の解決策かもしれません。

関連する問題