0

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

我正在使用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();        
}
4

3 回答 3

4

您创建了,但忘记使用'方法XSSFCellStyle将其分配给单元格。CellsetCellStyle

cell.setCellStyle(style1);
于 2013-10-15T17:00:17.097 回答
1

在对现有 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);
于 2013-10-16T13:22:32.753 回答
0

我遇到了 XSSFCellStyle 复制的问题。

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

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

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

2)背景颜色副本问题。最终 xlsx 文件中的某些字段填充了源文件中错误的背景颜色。

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

希望这会有所帮助。

于 2015-08-15T07:59:14.883 回答