Apache POI,创建新单元格将覆盖行样式

2022-09-03 01:23:09

我正在使用Apache POI将数据导出到.xlsx文件,并且我想设置文件中包含的一些行和单元格的样式。

我正在使用XSSF,因为该文件将在Excel 2007 +中读取。

基本上,我的问题是我试图设置一个行样式,如下面的示例所示,该样式在索引0处为整行设置黑色前景色。它工作正常,但是每当我创建新单元格时,新创建的单元格都没有样式,就好像它覆盖了我指定的行样式一样。

下面是一个代码片段,用于演示我正在执行的操作:

XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("mySheet");
XSSFRow row = sheet.createRow(0);

XSSFCellStyle myStyle = wb.createCellStyle();           

myStyle.setFillForegroundColor(new XSSFColor(new Color(255, 255, 255)));
myStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);

row.setRowStyle(myStyle); //This works, the whole row is now black

row.createCell(0); // This cell doesn't have a style, the rest of the line stays stylized
row.getCell(0).setCellValue("Test");

我也尝试了*row.createCell(0,Cell.CELL_TYPE_STRING);*,但它没有改变任何东西。

完成我想做的事情的正确方法是什么?我想这样做,这样我就不必在创建后设置每个单元格的样式,因为同一行上的所有单元格都具有相同的样式。


答案 1

将样式设置为新创建的单元格,例如:

    XSSFCell newCell = row.createCell(0);
    newCell.setCellStyle(myStyle);

答案 2

即使您创建具有样式的行,它也不会影响其创建的单元格。创建单元格具有自己的单元格样式。不会自动覆盖。如果要在单元格中使用行样式,则必须重新设置。row stylecell style

即使您设置在最后,它也不会对单元格产生影响。row style

CreationHelper createHelper = wb.getCreationHelper();
Sheet sheet = wb.createSheet("new sheet");
Row r = sheet.createRow(0);
r.setRowStyle(rowStyle);

Cell c1 = r.createCell(0);
c1.setCellValue("Test 1");
c1.setCellStyle(rowStyle);

推荐