Java 基于POI实现根据 Excel模板填充数据并导出Excel
【本案例基于spring boot架构】一、需求介绍给定一个Excel模板,在指定位置插入数据,然后将生成的excel导出。二、实现方法介绍1、准备Excel模板模板中要插入数据的地方用“${...}"代替(其实就是占位符,与mybatis的sql语法占位符一样),2、代码实现(可移植)本案例用到的jar包依赖如下:<de...
·
【本案例基于spring boot架构】
一、需求介绍
给定一个Excel模板,在指定位置插入数据,然后将生成的excel导出。
二、实现方法介绍
1、准备Excel模板
模板中要插入数据的地方用“${...}"代替(其实就是占位符,与mybatis的sql语法占位符一样),
2、代码实现(可移植)
本案例用到的jar包依赖如下:
<!-- 注意!!!jxls-core依赖的poi-comon版本是3.9,3.9之后的版本可能会出现no suchMethod报错 -->
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>1.0.3</version>
</dependency>
/**
* 根据Excel模板导出Excel
*
* @param data:要放入Excel模板中的数据
* @param response
* @Param fileName:下载 的文件名(不带后缀)
* @Param templete:模板名(带后缀)
*/
public static void exportExcelFromTemplete(String templeteName, String fileName, Map<String, Object> data, HttpServletResponse response) {
String dir = System.getProperty("user.dir");
String excelTempletePath = dir + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "templates";
response.reset();
//设置下载文档格式
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xlsx");
try {
//创建临时导出文件
File tempFile = File.createTempFile(fileName, ".xlsx");
/**
* 利用XLSTransform转到Excel
*/
XLSTransformer transformer = new XLSTransformer();
/**
* templete:模板文件
* tempFile.getAbsolutePath():临时文件的绝对地址
*/
String templete = excelTempletePath + File.separator + templeteName;
//开始转换到Excel,并写入数据(写入数据的核心代码)
transformer.transformXLS(templete, data, tempFile.getAbsolutePath());
BufferedOutputStream outputStream = null;
BufferedInputStream inputStream = null;
inputStream = new BufferedInputStream(new FileInputStream(tempFile));
outputStream = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[inputStream.available() + 1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
outputStream.close();
inputStream.close();
/**
* 下载完成删除临时文件
*/
tempFile.delete();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
}
说明:Map中的数据,其键(key)要和Excel表中要插入的数据${*}中的*一一对应。
如: 当像map中插入这条数据后,调用上面的方法,就可以生成自己需要的Excel。
本案例生成的Excel如下图所示:
ps:以上代码可以直接拷贝使用,只是要注意依赖包的导入不要忘记,如有报错,欢迎交流。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)