Я использую одну рабочую книгу HSSF в качестве шаблона для другого. Из-за того, как это работает, поскольку вы, вероятно, знаете, читаете ли вы это, я не могу просто взять ячейку из рабочей книги 1 и установить ее стиль в CellStyle из книги 2. Как это должно быть сделано, это cloneStyleFrom второго стиль.Почему клонированный HSSFCellStyle не равен стилю, с которым он клонирован?
Однако на листе есть максимум 4000 стилей, поэтому я стараюсь избегать клонирования неограниченного количества стилей. Итак, я проверяю, соответствует ли стиль, который я собираюсь клонировать, любому стилю, который уже существует в моей книге. Если это так, я просто использую стиль, который уже существует. Если это не так, я клонирую стиль из учебника шаблонов.
Я использую метод equals, определенный ниже, который, похоже, не заботится о том, из какой книги из этого стиля.
Однако, когда в конце всего этого я проверяю:
if (!getCellStyle().equals(cell.getCellStyle())) {
System.out.println("Not equal to cloned style!");
} else {
System.out.println("Equal to cloned style.");
}
... выход указывает на то, что стили не равны.
Почему это?
Примечание: проверено, что оба объекта имеют тип HSSFCellStyle с использованием instanceof.
Спасибо, хороший улов. Я не знаю, почему я об этом не думал. Вероятно, ослепленный мышлением equals(), намеревался проверить сходство стиля, а не конкретное равенство рабочей книги. –
Это отвечает на этот вопрос, но вызывает другое ... как определить сходство стиля. По-видимому, DataFormatString - это еще не все. –
Вы можете иметь два стиля в одной книге, которые отображают то же самое, отличающиеся только их индексом. Они не будут одинаковыми, поэтому метод equals ведет себя так, как он делает – Gagravarr