1

我正在使用一个 HSSF 工作簿作为另一个模板。由于它是如何工作的,如果您正在阅读本文,您可能知道,我不能简单地从工作簿 1 中获取一个单元格并将其样式设置为工作簿 2 中的 CellStyle。应该这样做的方式是 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.");
        }

...输出表明样式不相等。

为什么是这样?

注意:使用 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 回答