1

あるHSSFワークブックを別のワークブックのテンプレートとして使用しています。それがどのように機能するかという理由で、これを読んでいると思われるかもしれませんが、ワークブック1からセルを取得し、そのスタイルをワークブック2からCellStyleに設定することはできません。スタイル。

ただし、ワークシートには最大4000のスタイルがあるため、無制限の数のスタイルの複製を避けようとしています。そのため、複製しようとしているスタイルが、ブックに既に存在するスタイルと等しいかどうかを確認しています。もしそうなら、私はすでに存在するスタイルを使用します。そうでない場合は、テンプレートワークブックからスタイルを複製します。

私は以下に定義されているequalsメソッドを使用していますが、これはスタイルがどのワークブックからのものであるかを気にしないようです。

http://www.java2s.com/Open-Source/Java-Document/Collaboration/poi-3.6/org/apache/poi/hssf/usermodel/HSSFCellStyle.java.htm#equalsObject

しかし、このすべての終わりに私がチェックするとき:

        if ( !getCellStyle().equals(cell.getCellStyle()) ) {
            System.out.println("Not equal to cloned style!");
        } else {
            System.out.println("Equal to cloned style.");
        }

...出力は、スタイルが等しくないことを示しています。

どうしてこれなの?

注:instanceofを使用して、両方のオブジェクトがタイプHSSFCellStyleであることを確認しました。

4

1 に答える 1

3

私はequalsメソッドを調べました。すべてが等しい場合、_index変数がチェックされます。インデックスは、ExtendedFormatオブジェクトのリスト(以下のJavadoc)の位置に依存しているようです。HSSFCellStyleに位置に関する情報が含まれていて、ExtendedFormatRecordのラッパーとして機能する場合は、ExtendedFormatRecordオブジェクトを再利用してスペースを節約できます。

/**
         * get the index within the HSSFWorkbook (sequence within the collection of ExtnededFormat objects)
         * @return unique index number of the underlying record this style represents (probably you don't care
         *  unless you're comparing which one is which)
         */
        public short getIndex() {
            return _index;
        }
于 2012-01-19T10:51:02.860 に答える