Изменить стиль строки с Apache POI - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь изменить цвет фона строки или выделить его другим цветом, используя следующий код:

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 голос
/ 29 марта 2019

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

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

...