1.首先是报错截图
2。代码内容
public String writeExcel(String updateTime) {
// 获取文件生成路径
String fileName = PATH + "/staff-vacation" + updateTime + ".xlsx";
List<DataDTO> dataDTOS = null;
try {
dataDTOS = users.selectAll(updateTime);
for (DataDTO dataDTO : dataDTOS) {
if(null== dataDTO.getOpenid()||""== dataDTO.getOpenid()){
dataDTO.setOpenid("*");
}
if(null== dataDTO.getDeleted()||""== dataDTO.getDeleted()){
dataDTO.setDeleted("0");
}
if(null== dataDTO.getUpdateUser()||""== dataDTO.getUpdateUser()){
dataDTO.setUpdateUser("*");
}
}
} catch (Exception e) {
log.error("文件转换异常", e);
}
log.info("文件存储路径:============="+fileName);
// 把数据库的数据放到EXCEl表格中
EasyExcel.write(fileName, DataDTO.class).sheet("staff_vacation").doWrite(dataDTOS);
return fileName;
3.排错思路
一开始出现空指针是因为数据库里面有脏数据,解决后上传到服务器发现问题还会存在,通过查看日志发现是从数据库查出文件后出现的空指针,没有对数据进行写入Excel操作。
首先确定路径没问题后,在代码中对写入文件单独抛异常后发现正常运行,发现就是写入文件的问题,What!!!!写入怎么会出错呢,本地跑是没问题的。经过一番百度后,确定了问题的所在:
- easyExcel和POI的jar包不兼容
Easyexcel的使用,选对版本很重要,不然会报错。官方推荐的版本清单如下:
poi版本:3.17及以上
easyexcel版本:建议使用2.0.x及以上
本文的讨论及代码,基于以下版本:
poi版本:3.17
easyexcel版本:建议使用2.0.6及以上
1. EasyExcel mac或者windows下导出EXCEL正常,Linux服务器下NullPointerException
经过了解,知道是因为alpine中缺少FontConfiguration,那么就考虑安装ttf-dejavu这个软件。
在这篇博客找到了解决办法。
在服务器适当位置位置创建一个Dockerfile,内容为:
FROM java:8-jre-alpine
# Install cURL
RUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main\n\
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" > /etc/apk/repositories
RUN apk --update add curl bash ttf-dejavu && \
rm -rf /var/cache/apk/*
在同一位置执行:
docker build -t docker.io/java-font:8-jre-alpine .
执行完毕后会有一个新的java的镜像:
REPOSITORY IMAGE ID CREATED SIZE
docker.io/java-font 8-jre-alpine dc7703ec6f07 31 hours ago 131.5 MB
再次构建项目的时候使用新的jdk镜像即可解决问题。