什么时候apache poi覆盖Excel格式,什么时候不呢?

时间:2013-08-11 11:02:02

标签: java excel apache-poi

我想使用Apache POI生成Excel,我可以在其中显示大约2000条记录,其中每条记录包含日期和值。

我希望Excel能够正确格式化,为单元格背景着色,并应用适当的数字格式。

我可以完成这两项任务,但我不能像我想的那样有效地进行格式化。

我尝试应用格式的3种方法如下:所有三种方法都涉及使用预格式化的Excel模板。但问题是,在Excel中要做多少格式化(以及如何应用格式化)以及在Java中要做多少工作。

方法1 : 在Excel本身格式化一行,并使用Java代码复制格式。例如:

Row existingRow = mySheet.getRow(4);
Cell existingCell = existingRow.getCell(0);
CellStyle currentStyle = existingCell.getCellStyle();

for (int w = 0; w < refData.size(); w++) {
    MyValues aa = refData.get(w);
    Row r = CellUtil.getRow(w + 4, mySheet);
    CellUtil.getCell(r, 0).setCellValue(aa.getMarketDate());
    if (w>0) {
         CellUtil.getCell(r, 0).setCellStyle(currentStyle);
    }

方法2 :在Excel中选择包含所需格式的单元格并粘贴我需要的区域(2000行),然后使用Apache POI填写数据

方法3 :使用Excel将格式应用于列,然后使用Apache POI填充数据。

第三种方法对我来说是优选的,因为(a)当我可以在Excel中预格式化时,我不需要开始编写Java代码[请注意,我的现实问题包括数十列,而不仅仅是一列](b)将格式应用于列在工作簿使用的内存方面非常有利。

唯一的问题是当Apache POI写入复制和粘贴格式的单元格时,它们会正常显示。当它写入已将格式应用于列的单元格时,它会在粘贴之前删除格式。

有没有办法解决这个问题?我假设没有,因为Apache POI通过单独考虑每一行来工作。例如,要将格式应用于列,需要在列

中单独将格式应用于每个单元格

2 个答案:

答案 0 :(得分:0)

一种方法是在打开工作簿时使用VBA宏将格式应用于列。

Private Sub Workbook_Open()
   'column formatting
End Sub

然而,显然这有一个缺点,即用户需要启用宏

答案 1 :(得分:0)

您需要阅读&#34;指南&#34;单元格并将其应用于列。通过这种方式,新细胞将成为他们的风格。

例如。 (一旦你开始写价值之前)

Row guideRow = mySheet.getRow(0);
for (int ii = 0 ; ii < row.getNumColumns; ++ii) {
  CellStyle currentStyle = row.getCell(ii).getCellStyle();
  mySheet.setDefaultColumnStyle(ii, currentStyle);
}