Apache POI背景颜色样式似乎无法正常工作

时间:2017-04-04 16:08:06

标签: java apache-poi xlsx xssf

晚上好! 我在使用apache poi v.3.14时遇到了一些麻烦,当我使用Libreoffice或Excel打开渲染的xlsx时,样式未正确应用。

我有这段代码:

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 office之间的背景并不正确。 谢谢!

1 个答案:

答案 0 :(得分:7)

背景颜色的问题是颜色有点不直观。单元格有三种颜色,一种用于字体,两种用于填充。填充是大多数人称之为细胞背景的。它实现为填充图案,并具有前景颜色和背景颜色。当您使用实心填充时:

cs.setFillPattern(FillPatternType.SOLID_FOREGROUND);

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

cs.setFillForegroundColor(LOCKED_COLOR);

您使用的填充背景颜色在使用实心填充图案时不可见。

要使锁定的单元格工作,您必须通过以下方式启用表单保护:

Sheet.protectSheet(password)

如果密码为null,则必须设置密码,然后禁用保护。您可以使用以下命令删除密码:

Sheet.setSheetPassword(null, null);