当前位置: 首页 > 知识库问答 >
问题:

创建一个新的单元格,在Apache POI中复制以前单元格的样式...?

钱季
2023-03-14

在我的java类中,我声明的单元格如下:

HSSFCell cell = null;

我在很多地方使用这个单元格来创建一个单元格并设置值和样式。如:

cell = row.createCell(1);               
cell.setCellValue("1234.00");
setCellStyle(currency, cell, workbook);

cell = row.createCell(2);               
setCellValue("2445.00");

现在,令人惊讶的是,第一个单元格的数据格式被应用到第二个单元格。有人知道吗?我希望第二牢房的风格是无。第一个单元格的样式应该是setCellStyle()方法应用的数据格式。但是,实际上我得到的是setCellStyle()方法应用的数据格式的两个单元格值。

setCellStyle()方法:

public void setCellStyle(String currency, HSSFCell cell, HSSFWorkbook workbook){

        HSSFCellStyle cellStyle = cell.getCellStyle();//I am using cell.getStyle() because the default cell style is not null for a HSSFCell

        HSSFDataFormat dataFormat = workbook.createDataFormat();

        if("GBP".equalsIgnoreCase(currency)){
            cellStyle.setDataFormat(dataFormat.getFormat("[$£-809]#,##0_);[Red]([$£-809]#,##0)"));                 
        }else (){
            cellStyle.setDataFormat(dataFormat.getFormat("$#,##0_);[Red]($#,##0)")); 
        }
}

共有1个答案

党俊健
2023-03-14

现在您已经更新了文章,展示了setCellStyle方法,我可以看到问题所在了。每个单元格都以默认的CellStyle开头,并且它们都共享相同的默认CellStyle。当您为第一个单元格调用SetCellStyle时,您正在更改所有单元格共享的默认CellStyle。这意味着您创建的任何其他单元格,如果您没有设置CellStyle则可以进行更改。此外,在其他任何时候调用自己的setCellStyle时,它都将再次更改默认单元格样式。

相反,使用工作簿CreateCellStyle方法,创建一个新的CellStyle,只有该单元格才具有该新的CellStyle

HSSFCellStyle cellStyle = workbook.createCellStyle();

如果您打算将多个单元格设置为相同的单元格样式,那么您应该重用CellStyle对象。

从工作簿中创建一个新的单元格样式是很重要的,否则,您可能会修改内置样式,并且不仅影响该单元格,还影响其他单元格。

 类似资料:
  • 我无法将此行的样式设置为: 它给我的错误是“无法在基元类型void上调用setCellValue(String)”。这种情况下的错误是什么?我如何在单行代码中实现所有3个目标?

  • 我正在尝试创建一个DFS生成的迷宫。我首先制作了一个有4行(顶部、右侧、底部和左侧)的对象。然后我将这些线绘制到Maze上。我的问题是大多数单元格看起来都很好,但是的左侧和顶部都有粗线,我不知道如何使它成为一个常规网格。 这是我的单元格,我在这里创建行: 是单元格的宽度,是高度。 这是我的,我在其中画线: 我很感激能得到的任何帮助。 运行时,我的网格如下所示:

  • 我想要的是让第一个textField更靠近第一个jlabel,在第一个textField和第二个jlabel之间有一些空间,像这样: JLabel:JTEXTFIELD-----(spaceeee)-------JLabel:JTEXTFIELD 但我所改变的一切都不能接近我想要的,你看:

  • 我的excel工作表中有两个单元格,其中一个单元格包含如下字符串: 而另一个单元格有欧元货币,例如: 现在我想复制这两个值,即“总额”和“223.463.687€”,并将其复制到第三个单元格中。我使用的公式是这样的: 我得到以下结果: 但是我应该: 注: 货币的格式是德语格式,意思是“.”(小数点)和“,”(昏迷)扮演相反的角色。在德语格式中,“,”是小数点,在英语中是“。”。

  • 我正在使用Apache POI将数据导出到一个.xlsx文件,我想对文件中包含的一些行和单元格设置样式。 我使用XSSF,因为该文件将在Excel2007+中读取。

  • 在谷歌搜索StackOverflow之后,我还没有找到与这个问题相关的地方。目前我可以将空白单元格读取为空,但一次只能读取一个单元格。所以我必须写这样的东西: 这对我来说不太好,因为我对重复感到不满。我们可以设置返回?