【问题标题】:When does apache poi override Excel formatting and when does it not?apache poi 何时覆盖 Excel 格式,何时不覆盖?
【发布时间】:2013-08-12 20:00:45
【问题描述】:

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

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

我可以完成这两项任务,但我无法按照我想要的效率进行格式化。

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

方法一: 在 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 通过单独考虑每一行来工作。例如,要将格式应用于列,需要将格式分别应用于列中的每个单元格

【问题讨论】:

  • 另一种方法是从预先格式化的模板 excel 中加载,填充并保存到所需的位置。
  • 嗨@Ravinder。我建议的所有 3 个解决方案都涉及使用预先格式化的模板。我已经编辑了我的问题以使其更清楚。谢谢

标签: java excel apache-poi


【解决方案1】:

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

Private Sub Workbook_Open()
   'column formatting
End Sub

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

【讨论】:

    【解决方案2】:

    您需要从“指南”单元格中读取样式并将其应用于列。这样新的单元格就会将其作为自己的样式。

    例如。 (在你开始写值之前)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2019-12-18
      • 1970-01-01
      • 2018-06-29
      相关资源
      最近更新 更多