Ответ 1
Установите стиль во вновь созданную ячейку, например, например. ниже:
XSSFCell newCell = row.createCell(0);
newCell.setCellStyle(myStyle);
Я использую POI Apache для экспорта данных в файл .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); *, но ничего не изменил.
Каков правильный способ выполнения того, что я хочу сделать? Я хотел сделать это таким образом, поэтому мне не нужно было устанавливать каждый стиль ячейки после его создания, поскольку все ячейки в одной строке имеют один и тот же стиль.
Установите стиль во вновь созданную ячейку, например, например. ниже:
XSSFCell newCell = row.createCell(0);
newCell.setCellStyle(myStyle);
Даже вы создаете строку со стилем, она не будет влиять на созданную ячейку. Созданная ячейка имеет свой собственный стиль ячейки.
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" не работает так, как должно быть.
Я создал свою собственную функцию для применения стиля к диапазону (может быть строкой или несколькими строками)
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);
}
}
}
}
}