Изменение стиля строки с помощью Apache POI

#java #apache-poi #xls #poi-hssf

#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. 1. Не повторяйте тот же вопрос. 2. Ваш код по-прежнему не компилируется. 3. Посмотрите на то, что я сказал в вашем предыдущем вопросе

2. @XtremeBaumer : Я не использую метод createCell() в этом методе в своем коде. Переменная src содержит путь к файлу, но это весь мой код.

Ответ №1:

setRowStyle(CellStyle style) работает не так, как вы ожидали. Взглянув на исходный код XSSFRow, вы не найдете итераций по ячейкам в строке или чего-то подобного.

 /**
 * 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);
    }
}
  

Насколько мне известно, это больше похоже на установку стиля строки по умолчанию. Но даже если вы зададите стиль строки таким образом, впоследствии созданные ячейки в этой строке не получат этот стиль. Скорее всего, вам придется выполнять стилизацию по ячейкам.