Apache POI 背景颜色样式似乎不起作用
Apache POI background color style seems not working
晚上好!
我在使用 apache poi v. 3.14 时遇到了一些问题,当我用 Libreoffice 打开渲染的 xlsx 或 Excel 样式应用不正确。
我有这个代码:
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);
...
}
}
Sheet 被设置为锁定。
输出不显示背景颜色并且不锁定单元格。
我不知道出了什么问题。我也试过看看它是否是一个已知的错误,但事实并非如此。
有人遇到过同样的问题吗?
如果我将背景填充图案更改为斜线,单元格会锁定,但背景在 Excel 和 Libre office 之间显示不正确。
谢谢!
背景颜色的问题是颜色有点不直观。一个单元格有三种颜色,一种用于字体,两种用于填充。填充就是大多数人所说的单元格背景。它作为填充图案实现,并具有前景色和背景色。当您使用纯色填充时:
cs.setFillPattern(FillPatternType.SOLID_FOREGROUND);
唯一使用的颜色是填充前景色,您可以使用以下方法设置:
cs.setFillForegroundColor(LOCKED_COLOR);
您使用的填充背景颜色在使用实心填充图案时不可见。
要使锁定的单元格正常工作,您必须通过以下方式启用 sheet 保护:
Sheet.protectSheet(password)
您必须设置密码,如果密码是null
则保护被禁用。您可以使用以下方法删除密码:
Sheet.setSheetPassword(null, null);
晚上好! 我在使用 apache poi v. 3.14 时遇到了一些问题,当我用 Libreoffice 打开渲染的 xlsx 或 Excel 样式应用不正确。
我有这个代码:
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);
...
}
}
Sheet 被设置为锁定。 输出不显示背景颜色并且不锁定单元格。 我不知道出了什么问题。我也试过看看它是否是一个已知的错误,但事实并非如此。 有人遇到过同样的问题吗? 如果我将背景填充图案更改为斜线,单元格会锁定,但背景在 Excel 和 Libre office 之间显示不正确。 谢谢!
背景颜色的问题是颜色有点不直观。一个单元格有三种颜色,一种用于字体,两种用于填充。填充就是大多数人所说的单元格背景。它作为填充图案实现,并具有前景色和背景色。当您使用纯色填充时:
cs.setFillPattern(FillPatternType.SOLID_FOREGROUND);
唯一使用的颜色是填充前景色,您可以使用以下方法设置:
cs.setFillForegroundColor(LOCKED_COLOR);
您使用的填充背景颜色在使用实心填充图案时不可见。
要使锁定的单元格正常工作,您必须通过以下方式启用 sheet 保护:
Sheet.protectSheet(password)
您必须设置密码,如果密码是null
则保护被禁用。您可以使用以下方法删除密码:
Sheet.setSheetPassword(null, null);