【问题标题】:Setting fill-color in XSSFCell with Apache POI does not work使用 Apache POI 在 XSSFCell 中设置填充颜色不起作用
【发布时间】:2013-10-15 16:15:33
【问题描述】:

我试图执行以下测试(主要从Apache POI homepage 复制)以验证 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();        
}

【问题讨论】:

    标签: java apache-poi


    【解决方案1】:

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

    cell.setCellStyle(style1);
    

    【讨论】:

      【解决方案2】:

      在对现有 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);
      

      【讨论】:

        【解决方案3】:

        我遇到了 XSSFCellStyle 复制的问题。

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

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

        仅添加一次合并区域即可解决此问题。

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

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

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-19
          • 2019-01-31
          • 1970-01-01
          • 1970-01-01
          • 2017-02-06
          • 1970-01-01
          • 1970-01-01
          • 2018-11-15
          相关资源
          最近更新 更多