为每个单元格设置CellStyle(),以在数据量大(千行和列)的情况下永久使用

时间:2019-01-24 12:26:08

标签: java apache-poi

作为我们项目的一部分,我们必须构建一个excel报告,该报告将包含成千上万的行和列。在这种情况下,每行中的许多单元格将具有不同的单元格样式,例如,绿色文本,红色文本,不同的背景填充等。

请问有人可以提出一种更好的方法来处理这种情况吗?

请让我知道是否有任何疑问。

我尝试将CellStyle应用于一行中的每个单元格。使用..getCell()。setCellStyle()。但是,当存在许多行和许多列时,此操作将消耗大量时间。结果,对于海量数据,excel报表本身不会永远下载。我也尝试过先应用rowStyle,然后在需要时再应用单个单元格样式。但是应用rowStyle会有一些不同。应用rowStyle不会影响excel模板中的现有单元格样式,也不会影响该单元格中不存在单元格的样式,因此我从Java代码创建了单元格,这对我们来说是一个问题。如果将RowStyle应用于该行中存在的所有单元格,而不考虑单元格是否已经具有单元格样式或不存在单元格,那么我们应该很好。

我无法按照公司政策发布代码。我为此感到遗憾。

我希望将所需的样式应用于每个单元格,执行时间不会花费很多时间。

谢谢, 萨加尔。

1 个答案:

答案 0 :(得分:1)

在涉及cellStyles时,您需要格外小心。 Excel在工作簿中仅允许使用不同数量的单元格样式(如here所示,Excel 2003〜4000 | Excel 2007及更高版本〜64000)。

应该为每个单元格定义一个新的cellStyle,而不是为每个单元格创建新的 for (int i = 0; i < 10000; i++) { Row row = sheet.createRow(i); Cell cell = row.createCell(0); CellStyle style = workbook.createCellStyle(); Font font = workbook.createFont(); font.setBoldweight(Font.BOLDWEIGHT_BOLD); style.setFont(font); cell.setCellStyle(style); } ,将其缓存并在需要时将其分配给该单元格。

代替这样做:

   CellStyle style = workbook.createCellStyle();
   Font font = workbook.createFont();
   font.setBoldweight(Font.BOLDWEIGHT_BOLD);
   style.setFont(font);
   for (int i = 0; i < 10000; i++) 
   {
        Row row = sheet.createRow(i);
        Cell cell = row.createCell(0);
        cell.setCellStyle(style);
    }

您应该执行以下操作:

&trade;

您可以了解有关此here的更多信息。