建议先去看文档
触发场景描述
V3.2.1,设置全局单元格样式,导出Office Excel打开后内容被黑色覆盖,WPS打开则正常显示。
Excel文件格式均为xlsx
触发Bug的代码
/**
* 自定义内容单元格全局样式
*
* @return
*/
public static HorizontalCellStyleStrategy contentCellStyle() {
// 内容的策略
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
// 居中 水平居中、垂直居中
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 边框
contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
return new HorizontalCellStyleStrategy(null, contentWriteCellStyle);
}
/**
* 导出
*
* @param response
* @param fileName
* @param sheetDataWrapper
*/
private void export(HttpServletResponse response, String fileName, WriteSheetDataWrapper sheetDataWrapper) {
if (ObjectUtil.isNotEmpty(sheetDataWrapper)) {
ExcelWriter excelWriter = null;
try {
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding(CharsetUtil.UTF_8);
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String encodeFileName = URLEncoder.encode(fileName, CharsetUtil.UTF_8).replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodeFileName + ExcelTypeEnum.XLSX.getValue());
excelWriter = EasyExcel.write(response.getOutputStream())
// 设置的全局样式
.registerWriteHandler(ExportService.contentCellStyle())
.build();
excelWriter.write(sheetDataWrapper.getDataList(), sheetDataWrapper.getSheet());
} catch (Exception ex) {
log.error("Export excel error.", ex);
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
}
}
}
提示的异常或者没有达到的效果
补充:
代码中出现的WriteSheetDataWrapper,是我构建的一个包装类,用于统一处理内容、表头、Sheet名称。
V3.2.1,使用自定义的全局样式,对内容的样式做了统一处理,表头使用的默认样式。导出的Excel使用WPS打开一切正常,Office Excel打开内容就是黑的;取消全局样式的设置后,导出的Excel二者都可正常显示内容。
设置全局格式的Excel截图
未设置全局样式的Excel截图
4条答案
按热度按时间k3fezbri1#
将Office Excel打开为黑色的单元格背景色,改为白色填充后,填充的内容和样式也能被看到。
即使我将全局样式中加上白色的单元格背景色设置,Office打开仍旧是黑色的。
r7knjye22#
我也遇到这个问题,也是把全局样式删除就可以了。改成局部样式来设置。
8zzbczxx3#
我也遇到这个问题,也是把全局样式删除就可以了。改成局部样式来设置。
`
// 前景色
`
在全局样式中用这个来设置“前景色”,Excel的单元格背景色,就能生效了。WPS、Office打开都是正常。
ssgvzors4#
我也遇到了一样的问题,导出来用MS Office打开结果内容背景色是纯黑色,这就很困惑了。毕竟我设置的全局背景色都是白色,字体颜色是纯黑色,突然蹦出来一大片黑色背景色就很莫名其妙,后来发现是
FillPatternType.SOLID_FOREGROUND
这个设置搞的鬼,去掉它就正常了。