Как правильно использовать стиль в формате apache-poi? - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь отформатировать сгенерированный в Excel файл из моего кода Java. Вот как выглядит мой фрагмент кода:

...
Row row = sheet.createRow(rowNum++);
CellStyle textCellStyle = workbook.createCellStyle();
if (rowNum % 2 == 0) {
    textCellStyle.setFillBackgroundColor(IndexedColors.GREEN.getIndex());
    textCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    textCellStyle.setFont(textFonts1);
} else {
    textCellStyle.setFont(textFonts2);
}

cell = row.createCell(0);
cell.setCellValue(student != null ? student.getIdNumber() : "");
cell.setCellStyle(textCellStyle);
...

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

Я использую poi-3.17 и poi-ooxml-3.17, Excel 2007 и Java 1.6

enter image description here

Ответы [ 2 ]

2 голосов
/ 26 марта 2019

Вы установили шаблон заливки для ячейки как FillPatternType.SOLID_FOREGROUND . Но вы не установили цвет переднего плана. Это означает, что стандартный цвет (черный) используется в качестве цвета переднего плана.

Попробуйте обменять ...

textCellStyle.setFillBackgroundColor(IndexedColors.GREEN.getIndex());

... с ...

textCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());

... и он должен отображаться так, как вы ожидаете. Текст в ячейках также должен быть виден.

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

0 голосов
/ 27 марта 2019

Я новичок в Apache POI и пока не знаю подробностей.Но - в некоторых случаях - вам может пригодиться следующее.

Этот код ...

import java.io.FileOutputStream;
import java.io.OutputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class CellBackground {

  public static void main(String[] args) throws Exception {

    XSSFWorkbook wb = new XSSFWorkbook();
    Sheet sheet = wb.createSheet();
    int rowNum = 0;
    for (FillPatternType fpt : FillPatternType.values()) {
      Row row = sheet.createRow(rowNum++);
      Cell cell = row.createCell(0);
      XSSFCellStyle textCellStyle = wb.createCellStyle();
      textCellStyle.setFillBackgroundColor(IndexedColors.GREEN.getIndex());
      textCellStyle.setFillPattern(fpt);
      cell.setCellValue(fpt.name());
      cell.setCellStyle(textCellStyle);
      sheet.createRow(rowNum++).setHeightInPoints(7);
    }
    sheet.autoSizeColumn(0);

    OutputStream fileOut = new FileOutputStream("CellBackground.xlsx");
    wb.write(fileOut);
    wb.close();
  }
}

... будет выводить этот вывод в LibreOffice Calc (Apache POI 4.0.1):

enter image description here

...