0

POIイベントで非常に大きなExcelをインポートします。すべてのコンテンツを取得しましたが、セルの背景色は取得していません。

ExtendedFormatRecordsを試しましたが(ここで説明)、行番号と列番号の情報を持つ前のセルがどれであるかを識別できません。

私の場合、NumberRecordsの色が必要です!

これが私が試した方法です:

    switch (record.getSid()) {
    case BOFRecord.sid:
        break;
    case BoundSheetRecord.sid:
        BoundSheetRecord bsr = (BoundSheetRecord) record;
        System.out.println("New sheet named: " + bsr.getSheetname());
        break;
    case RowRecord.sid:
        break;
    case NumberRecord.sid: // Contains a numeric cell value
        NumberRecord numrec = (NumberRecord) record;
        row = numrec.getRow();
        col = numrec.getColumn();
        //Do something
        break;
    case ExtendedFormatRecord.sid:
        ExtendedFormatRecord efr = (ExtendedFormatRecord) record;
        if (previousSid == NumberRecord.sid) {
            // row = previousRecord.getRow();
            // col = previousRecord.getColumn();
            // System.out.println("row: " + row + " column: " + col);
            System.out.println("ExtendedFormat "+efr.getFillForeground() + "");
        } else {
            System.out.println("ops! not that");
        }
        break;
        //other cases
        ...
    }//end switch
    previousSid = record.getSid();
    if (previousRecord != record) {
        previousRecord = null;
    }

誰か助けてもらえますか!?

ありがとう!

4

1 に答える 1

0

詳細に入る前に、2ビットのコードを確認する必要があると思います。1つ目はApachePOIの一部であり、ExcelファイルをEventUserModelの一部として処理するときにフォーマットとスタイルの追跡を処理します--FormatTrackingHSSFListener。次に、Apache Tikaの一部は、イベント処理でセルのオンザフライフォーマットを行うためにそれを使用する例です-ExcelExtractor

あなたがやりたいことは可能であるはずですが、それは少しの作業が必要になります。幸い、Excelの書式設定とスタイル情報は、シート情報の一部ではなく、ブック情報の一部であるため、最初に表示されます。あなたがする必要があるのは、それらのレコードに最初に到達したときにそれらのレコードをキャッシュすることです。そうすれば、セルが通過したときにそれらを使用できるようになります。

次に、POI UserModelコードを確認し、実際にレコードと連携して色と書式を処理する方法を確認する必要があります。クラスを使用することはできませんが、同じ種類のものを実装するために、クラスからいくつかの主要なコードスニペットを借用して独自のクラスにすることができます。

あなたがしたいことは、FormatTrackingHSSFListenerを使用してExtendedFormatRecordsを利用可能にし、次に、遭遇した各セルのレコードを検索することです。XFRには、あらゆる種類の色関連の詳細があります。塗りつぶしの前景色と背景色、境界線、フォントがあります。次に、PaletteRecordを取得したら、それを保持し、UserModelHSSFPaletteクラスでラップします。次に、それを使用して、XFRからのインデックスに基づいて色を取得できます。また、FontRecordをキャプチャして、XFRのインデックスから検索できるようにする必要があります。また、FontRecordからカラーインデックスを取得し、HSSFPaletteで検索すれば、完了です。

最後に、うまく機能する場合は、次の人を助けるためにApachePOIの拡張機能として送信することを検討してください。

于 2012-09-02T07:11:04.200 に答える