Java apache poi何时覆盖Excel格式,何时不覆盖?
我想使用ApachePOI生成一个Excel,在其中我可以显示大约2000条记录,其中每条记录包含一个日期和一个值 我希望这个Excel格式正确,为单元格背景着色,并应用适当的数字格式 我可以完成这两项任务,但我不能像我希望的那样高效地进行格式化 我尝试过的三种应用格式的方法如下:所有三种方法都涉及使用预格式化的Excel模板。然而,问题是在Excel中要做多少格式化(以及如何应用格式化)以及在Java中要做多少 方法1: 在Excel中格式化一行,并使用Java代码复制格式化。例如:Java apache poi何时覆盖Excel格式,何时不覆盖?,java,excel,apache-poi,Java,Excel,Apache Poi,我想使用ApachePOI生成一个Excel,在其中我可以显示大约2000条记录,其中每条记录包含一个日期和一个值 我希望这个Excel格式正确,为单元格背景着色,并应用适当的数字格式 我可以完成这两项任务,但我不能像我希望的那样高效地进行格式化 我尝试过的三种应用格式的方法如下:所有三种方法都涉及使用预格式化的Excel模板。然而,问题是在Excel中要做多少格式化(以及如何应用格式化)以及在Java中要做多少 方法1: 在Excel中格式化一行,并使用Java代码复制格式化。例如: Row
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);
}
Row existingRow=mySheet.getRow(4);
Cell existingCell=existingRow.getCell(0);
CellStyle currentStyle=existingCell.getCellStyle();
对于(int w=0;w0){
CellUtil.getCell(r,0).setCellStyle(currentStyle);
}
方法2:在Excel中选择包含所需格式的单元格,粘贴到我需要的区域(2000行),然后使用Apache POI填写数据
方法3:使用Excel将格式应用于列,然后使用Apache POI填写数据
第三种方法对我来说更可取,因为(a)当我可以在Excel中预先格式化时,我不需要开始编程Java代码[注意,我的实际问题包括几十列,而不仅仅是一列](b)在工作簿使用的内存方面,对列应用格式是非常有利的
唯一的问题是,当Apache POI写入复制和粘贴格式的单元格时,这些单元格显示良好。当它写入已将格式应用于列的单元格时,则在粘贴之前删除格式
有没有办法解决这个问题?我假设没有,因为Apache POI是通过单独考虑每一行来工作的。例如,要将格式应用于列,需要将格式单独应用于列中的每个单元格一种方法是在打开wor时使用VBA宏将格式应用于列kbook
Private Sub Workbook_Open()
'column formatting
End Sub
然而,这显然有一个缺点,即用户需要启用宏。您需要从“guide”单元格中读取样式,并将其应用到列中。这样,新单元格将获得其样式 (在你开始写值之前一次)
Row-guideRow=mySheet.getRow(0);
对于(int ii=0;ii
另一种方法是从预格式化的模板excel加载,填充并保存到所需位置。您好@Ravinder。我的3个建议解决方案都涉及使用预格式化模板。我已编辑了我的问题以使其更清晰。谢谢
Row guideRow = mySheet.getRow(0);
for (int ii = 0 ; ii < row.getNumColumns; ++ii) {
CellStyle currentStyle = row.getCell(ii).getCellStyle();
mySheet.setDefaultColumnStyle(ii, currentStyle);
}