java 基于excel模板文件,填充数据的思路
Posted QQ_851228082
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 基于excel模板文件,填充数据的思路相关的知识,希望对你有一定的参考价值。
需求
用户可下载excel模板文件,填充数据后上传,也可以下载已上传所有数据的excel,模板文件和含数据excel,都有列头及列说明;由此想到模板文件和含数据excel共用一份excel模板,下载数据时在模板文件上填充数据,填充完还不能影响模板文件。
解决思路
在内存中,将模板文件复制一份,不落到磁盘,然后填充数据,输出到response中。
// 通过工具类创建writer
import cn.hutool.core.io.FileUtil;
import org.apache.commons.io.FileUtils
// 通过工具类创建writer
String fileName = "数据模板.xlsx";
String destFilePath = “目标文件路径”;
File file = FileUtil.file(destFilePath );
try
FileUtils.copyFile(FileUtil.file(fileName), file);
catch (IOException e)
log.warn("复制excel文件失败", e);
throw new SystemException("复制excel文件失败");
ExcelWriter writer = ExcelUtil.getWriter(filePath);
response.setContentType("application/vnd.ms-excel");
try
response.setHeader("Content-disposition", "attachment; filename="
+ URLEncoder.encode(fileName, "utf8"));
catch (UnsupportedEncodingException e)
log.warn("编码失败", e);
throw new SystemException("编码失败");
//自定义标题别名
writer.addHeaderAlias("col1", "列1");
writer.addHeaderAlias("col2", "列2");
writer.addHeaderAlias("col3", "列3");
// 默认的,未添加alias的属性也会写出,如果想只写出加了别名的字段,可以调用此方法排除之
writer.setOnlyAlias(true);
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(list, true);
// 关闭writer,释放内存
try
writer.flush(response.getOutputStream(), true);
catch (IOException e)
log.warn("生成excel出错", e);
throw new SystemException("导出excel出错");
finally
writer.close();
try
IoUtil.close(response.getOutputStream());
catch (IOException e)
log.warn("关闭servlet输出流失败", e);
file.delete();
高性能云服务器
精品线路独享带宽,毫秒延迟,年中盛惠 1 折起
以上是关于java 基于excel模板文件,填充数据的思路的主要内容,如果未能解决你的问题,请参考以下文章