Apache POI,创build新的单元格覆盖了行的样式

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

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

基本上,我的问题是,我试图设置一个行样式,如下面的例子,它为索引0整个行设置一个黑色的前景色。它工作正常,但每当我创build一个新的单元格,新创build单元格没有样式,就好像它重写了我指定的行样式。

这里有一个代码片段来演示我在做什么:

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); *,但它没有改变任何东西。

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

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

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

即使你创build一个风格的行,它不会影响到它的创build单元格。 创build单元格有自己的单元格样式。 row style不会自动覆盖到cell 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); 

我同意“setRowStyle”不能正常工作。

我创build了自己的函数来将一个样式应用到一个范围(可以是一行或多行)

 public void applyStyleToRange(Sheet sheet, CellStyle style, int rowStart, int colStart, int rowEnd, int colEnd) { for (int r = rowStart; r <= rowEnd; r++) { for (int c = colStart; c <= colEnd; c++) { Row row = sheet.getRow(r); if (row != null) { Cell cell = row.getCell(c); if (cell != null) { cell.setCellStyle(style); } } } } }