使用Apache POI更改行样式

时间:2019-03-28 14:06:21

标签: java apache-poi xls poi-hssf

我尝试使用以下代码更改行的背景色,或用其他颜色突出显示背景色:

FileInputStream fis = new FileInputStream(src);
HSSFWorkbook wb = new HSSFWorkbook(fis);
HSSFSheet sheet = wb.getSheetAt(0);
r = sheet.getRow(5);

CellStyle style = wb.createCellStyle();
style.setFillForegroundColor(IndexedColors.RED.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
r.setRowStyle(style);

FileOutputStream fileOut = new FileOutputStream(excelFileName);
wb.write(fileOut);
wb.close();
fileOut.flush();
fileOut.close();

我创建一个样式,将其设置为一行,然后将其写到同一文件中。执行代码时文件已修改,但背景颜色未更改。

1 个答案:

答案 0 :(得分:1)

setRowStyle(CellStyle style)无法正常工作。看看XSSFRow source code,您将不会在该行的单元格或类似内容上找到迭代。

/**
 * Applies a whole-row cell styling to the row.
 * If the value is null then the style information is removed,
 *  causing the cell to used the default workbook style.
 */
@Override
public void setRowStyle(CellStyle style) {
    if(style == null) {
       if(_row.isSetS()) {
          _row.unsetS();
          _row.unsetCustomFormat();
       }
    } else {
        StylesTable styleSource = getSheet().getWorkbook().getStylesSource();

        XSSFCellStyle xStyle = (XSSFCellStyle)style;
        xStyle.verifyBelongsToStylesSource(styleSource);
        long idx = styleSource.putStyle(xStyle);
        _row.setS(idx);
        _row.setCustomFormat(true);
    }
}

据我所知,它更像是设置默认的行样式。但是,即使以这种方式设置行样式,此后在该行中创建的单元格也不会获得此样式。您很有可能必须逐个单元地进行样式设置。