2013-10-15 134 views
0

我试图执行以下测试(主要是从Apache POI homepage复制)来验证API是否正常工作。测试不会抛出异常,但是当我查看生成的Excel文件时,彩色单元格(0,0 = A1)实际上是纯白色的。没有应用颜色。单元格值已正确设置。使用Apache POI在XSSFCell中设置填充颜色不起作用

我正在使用POI 3.9-20121203 (stable)

缺少什么我在这里?为什么这个例子不能按预期工作?

@Test 
public void test() throws FileNotFoundException, IOException 
{ 
    XSSFWorkbook wb = new XSSFWorkbook(); 
    XSSFSheet sheet = wb.createSheet(); 
    XSSFRow row = sheet.createRow(0); 
    XSSFCell cell = row.createCell(0); 
    cell.setCellValue("custom XSSF colors"); 

    XSSFCellStyle style1 = wb.createCellStyle(); 
    style1.setFillForegroundColor(new XSSFColor(new java.awt.Color(128, 0, 128))); 
    style1.setFillPattern(CellStyle.SOLID_FOREGROUND); 

    File f = new File("test.xlsx");  
    f.delete(); 

    FileOutputStream fos = new FileOutputStream(f);  
    wb.write(fos);  
    fos.close();   
} 

回答

2

您创建的XSSFCellStyle,但你忘了将其分配到一个小区,与Cell's setCellStyle方法。

cell.setCellStyle(style1); 
0

有你要注意对现有的Excel文件,这可能使设置单元格样式无法正常工作运行时,另一点:你总是要比较的默认CellStyle从电池获得的CellStyle工作表。如果两者都相同,则需要从工作簿中创建一个新的CellStyle。

将新颜色指定给默认的CellStyle不会在您的Excel工作表中产生任何可见的变化。

,而不会覆盖以前的风格会是这样分配的颜色到您的正确的方法:

// get cell style 
XSSFCellStyle style = cell.getCellStyle(); 

// get default workbook style 
XSSFCellStyle defaultStyle = workbook.getCellStyleAt((short) 0) 

// if both are equals create new style in workbook 
if(style.equals(defaultStyle)) { 
    style = workbook.createCellStyle();  
} 

// assign color 
style.setFillForegroundColor(new XSSFColor(myColor)); 
style.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

// set style 
cell.setCellStyle(style); 
0

我所面临的问题与XSSFCellStyle复制。

在我的情况下,我有多个xlsx输入流对象创建单个xlsx文件。但是,我需要单个xlsx文件,所有xlsx输入流都是单个xlsx文件中的单个工作表。

我用POI-3.11版本面临两个挑战。 1)当重复的合并区域添加到单个表单中时,会生成一些xlsx文件。每当我尝试打开文件时,都会要求恢复文件。

通过仅添加一次合并区域解决了此问题。

2)发行背景色副本。 最终xlsx文件中的某些字段使用来自源文件的错误背景颜色填充。

通过将源样式复制到每个单元格的目标来解决此问题。当我尝试合并源表中可用的不同样式列表并将源单元格样式与列表进行比较时遇到问题。

希望这会有所帮助。