2017-04-04 79 views
1

晚上好! 我在Apache poi v。3.14中遇到了一些麻烦,当我用Libreoffice或Excel打开呈现的xlsx时,样式未正确应用。Apache POI背景颜色风格似乎不起作用

我有这样的代码:为锁定

class... { 

private XSSFCellStyle doubleLockStyle; 
/** 
    * Create default cell style. 
    * 
    * @param myWorkBook 
    * @return The cell style. 
    */ 
    private XSSFCellStyle createCell(XSSFWorkbook myWorkBook, boolean locked) { 
     XSSFCellStyle cs = myWorkBook.createCellStyle(); 
     cs.setAlignment(HorizontalAlignment.CENTER); 
     if (locked) { 
      cs.setFillBackgroundColor(LOCKED_COLOR); //rgb from awt colors 
      cs.setFillPattern(FillPatternType.SOLID_FOREGROUND); 
      cs.setLocked(true); 
     } else { 
      cs.setLocked(false); 
     } 
     return cs; 
    } 

    /** 
    * Prepare cell styles. 
    * 
    * @param myWorkBook 
    */ 
    private void initStyles(XSSFWorkbook myWorkBook) { 
    ... 
     short df = myWorkBook.createDataFormat().getFormat("0.00"); 
     doubleLockStyle = createCell(myWorkBook, true); 
     doubleLockStyle.setDataFormat(df); 
    ... 
    } 
    private void writeSheet(XSSFWorkbook myWorkBook, CalendarValueType type, Date startDate, Date endDate) { 
    ... 
    cell.setCellStyle(doubleLockStyle); 
    ... 
    } 
} 

卡的设置。 输出不显示背景颜色,也不锁定单元格。 我找不出什么问题。我也试着看看它是否是一个知道的错误,但事实并非如此。 任何人都有同样的问题? 如果我将背景填充图案更改为斜线,但单元格会锁定,但背景在Excel和Libre办公室之间并不正确。 谢谢!

回答

5

背景颜色的问题是颜色有点不直观。单元格有三种颜色,一种用于字体,另一种用于填充。填充图案具有前景色和背景色。填充就是你所说的单元背景,并且可以有两种颜色模式。当您使用实心填充:

cs.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

使用的唯一颜色是填充前景色,您可以使用设置:

cs.setFillForegroundColor(LOCKED_COLOR); 

您使用的填充背景色使用固体时,这是不可见填充图案。

要锁定的单元格工作,你必须启用工作表保护通过:

Sheet.protectSheet(password) 

您必须设置一个密码,如果密码是null然后保护被禁用。您可以通过以下方式删除密码:

Sheet.setSheetPassword(null, null);