Java 8和Apache POI 4.x在这里。我发现evidence您只能通过dataFormat.getFormat(...)获得64K种不同的数据格式。但这是否意味着您可以多次调用dataFormat.getFormat(...),只要您的应用程序使用64K(或更少)的不同数据格式?还是这意味着您只能应用格式设置(因此在开始出现错误之前调用dataFormat.getFormat(...) 64K次?

最佳答案

由于不同单元格格式上的Excel限制,导致出现"Too many different cell formats"错误。这仅与不同的数据格式间接相关,因为单元格不仅可以在其单元格格式中设置数据格式,而且还可以设置字体格式,边框格式和内部格式(颜色)。该限制说明:在当前的Excel版本中,一个Excel工作簿中的单元格格式不能超过64,000。不同的单元格格式意味着数据格式,字体格式,边框格式,内部格式,...

因此,从理论上讲,您可以有64,000多种不同的数据格式,但在一本工作簿的不同单元格样式中不能使用超过64,000的数据格式。

apache poi的类DataFormat使用short索引不同的数据格式。由于short的最大值为32,767,索引以0开头,因此使用Workbook不能在一种apache poi中创建超过32,768种不同的数据格式。

注意:所有这些都是关于不同格式的。因此,只要不超过32,768种不同的数据格式,就可以根据需要多次调用DataFormat.getFormat而不会出错。

例如,您可以调用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")总是只能多次获得相同的数据格式索引。

10-07 18:56