Почему клонированный HSSFCellStyle не соответствует стилю, из которого он был клонирован? - PullRequest
1 голос
/ 19 января 2012

Я использую одну книгу HSSF в качестве шаблона для другой. Из-за того, как это работает, как вы, вероятно, знаете, если читаете это, я не могу просто взять ячейку из книги 1 и установить ее стиль на CellStyle из книги 2. Способ, которым это должно быть сделано, состоит в том, чтобы cloneStyleFrom второго стиль.

Однако на рабочем листе может быть не более 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."); }

... вывод указывает, что стили не равны.

Почему это?

Примечание. Проверено, что оба объекта имеют тип HSSFCellStyle, используя instanceof.

1 Ответ

3 голосов
/ 19 января 2012

Я посмотрел на метод равных.Если все равно, переменная _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;
        }
...