Java 8 和 Apache POI 4.x 在这里。我发现有证据表明您只能通过dataFormat.getFormat(...)
获得 64K 不同的数据格式。但这是否意味着只要你的应用使用 64K(或更少(不同的数据格式,您就可以调用任意次数dataFormat.getFormat(...)
?或者这是否意味着您只能应用格式(因此在开始出现错误之前调用dataFormat.getFormat(...)
64K 次?
由于不同单元格格式的Excel
限制,导致"太多不同的单元格格式"错误。这仅与不同的数据格式间接相关,因为单元格可能不仅在其单元格格式中设置了数据格式,而且还可能具有字体格式,边框格式和内部格式(颜色(。限制说:在当前Excel
版本中,一个Excel
工作簿中不能有超过64,000种不同的单元格格式。不同的单元格格式在数据格式、字体格式、边框格式、内部格式等方面意味着不同......
因此,从理论上讲,您可以拥有64,000多种不同的数据格式,但不能在一个工作簿的不同单元格样式中使用超过64,000种数据格式。
apache poi
的类 DataFormat 使用short
来索引不同的数据格式。由于short
的最大值为 32,767,并且索引以 0 开头,因此不能使用apache poi
在一次Workbook
中创建超过 32,768 种不同的数据格式。
注意:所有这些都是关于不同的格式。因此,您可以根据需要随时调用 DataFormat.getFormat 而不会出错,只要所需的不同数据格式不超过 32,768 种即可。
例如,您可以调用 CellUtil.setCellStyleProperty:
...
Workbook workbook = ...
DataFormat dataFormat = workbook.createDataFormat();
...
... {
Cell cell = ...
...
CellUtil.setCellStyleProperty(cell, CellUtil.DATA_FORMAT, dataFormat.getFormat("#,##0.00"));
...
}
...
根据需要,即使在超过 64,000 个单元格的循环中,dataFormat.getFormat("#,##0.00")
总是多次获得相同的数据格式索引。