为什么克隆的HSSFCellStyle不等于它克隆的样式?

时间:2012-01-19 10:29:51

标签: java spreadsheet poi-hssf hssf

我使用一个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类型

1 个答案:

答案 0 :(得分:3)

我看了一下equals方法。 如果一切都相同,将检查_index变量。 看来,索引依赖于ExtendedFormat对象列表中的位置(s。下面的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;
        }