HSSFSheet POI API Java 没有用颜色填充所有列

HSSFSheet POI API Java doesn't fill all columns with color

我正在使用 POI 将一些数据导出到 .xslx,但有些列没有填充颜色,我使用了一个循环,所以它应该可以工作,它适用于大多数列。那怎么了?

for (int i = 0; i < columnNamesFase1.length; i++) {
    HSSFCell cellA1 = row1.createCell((short) i);
    cellA1.setCellValue(columnNamesFase1[columnCount]);
    HSSFCellStyle cellStyle = workbook.createCellStyle();
    cellStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);
    cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    cellA1.setCellStyle(cellStyle);
    worksheet.autoSizeColumn(columnCount);
    columnCount++;
}

这里是 .xslx 文件,例如:https://dl.dropboxusercontent.com/u/41330678/new.xls

单元格样式适用于整个工作簿,因此绝不能在循环中创建。它们可以(并且应该)被重复使用,并且给定工作簿可以包含的数量有相当低的限制(由 Excel 文件格式强加)

因此,您应该将代码更改为更像:

HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

for (int i = 0; i < columnNamesFase1.length; i++) {
   HSSFCell cellA1 = row1.createCell((short) i);
   cellA1.setCellValue(columnNamesFase1[columnCount]);
   cellA1.setCellStyle(cellStyle);
   worksheet.autoSizeColumn(columnCount);
   columnCount++;
}

此外,自动调整列的大小是一个非常缓慢的步骤,所以只有在您写入所有行后才应该这样做