2017-08-06 95 views
2

我已经看过遍布堆栈溢出,并且似乎无法让我的java代码填充XSSF excel单元格的背景颜色。从别人所说的话,这应该使左上角的单元格变成黄色:Java Apache POI - XSSFCell setFillBackgroundColor没有影响

// Example Code 
try { 

    // prepare 
    FileInputStream resource = new FileInputStream(FILEPATH + FILENAME); 
    XSSFWorkbook workbook = new XSSFWorkbook(resource); 
    XSSFSheet sheet = workbook.createSheet("Example Sheet"); 

    // create 
    XSSFRow row = sheet.createRow(0); 
    XSSFCell cell = row.createCell(0); 
    XSSFCellStyle style = workbook.createCellStyle(); 
    XSSFColor color = new XSSFColor(Color.YELLOW); 

    // stylize 
    style.setFillBackgroundColor(color); 
    cell.setCellStyle(style); 

    // finalize 
    FileOutputStream output = new FileOutputStream("Example Workbook.xlsx"); 
    workbook.write(output); 
    workbook.close(); 

} catch (Exception e) { 

    // error 
    e.printStackTrace(); 

} 

......但事实并非如此。有人能让我知道我做错了什么吗?顺便说一下,我使用Apache POI版本3.16。

谢谢!的CellStyle

+0

闭上你的''输出所有 –

回答

2

三个属性决定细胞的填充方式:

  • FillPattern
  • FillForegroundColor
  • FillBackgroundColor

大部分填补像FillPatternType.BIG_SPOTS使用两种颜色的图案。名称FillForegroundColor具有误导性,但可以理解。这是填充图案的前景色,它仍然在单元格的背景中。

要用一种颜色填充单元格,您需要使用FillPatternType.SOLID_FOREGROUND,它使用前景颜色。所以,你需要改变你的代码如下:

// stylize 
style.setFillForegroundColor(color); 
style.setFillPattern(FillPatternType.SOLID_FOREGROUND); 
cell.setCellStyle(style); 
+0

真除附加postscriptum关于关闭输出流,因为'workbook.close();'已经在这样做。 –

+0

谢谢,不知道,我删除了postscriptum。 – r0the

+0

你的答案完美无缺,谢谢。 – Ibrahim