1.引用jxls依赖, 排除不需要的依赖。
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>1.0.6</version>
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
</exclusion>
<exclusion>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</exclusion>
<exclusion>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
2. 实现类中实现。
public void downloadTemplate(HttpServletRequest request, HttpServletResponse response, ImportTemplateCondition templateCondition) {
// 第三方导入模板文件名称 InitialCostImportTemplate_zh-CN.xlsx
String templateFileName = "InitialCostImportTemplate_" + request.getLocale().toLanguageTag() + ".xlsx";
try (
// 模板文件输入流
//InputStream templateFileInputStream = new FileInputStream("/home/template/path/" + templateFileName);
//TODO 仅供本地测试使用
InputStream templateFileInputStream = new FileInputStream("E:/resources/templates/" + templateFileName);
// 响应输出流
OutputStream responseOutputStream = response.getOutputStream();
) {
// xls 转换器
XLSTransformer transformer = new XLSTransformer();
// 数据map
Map<String, Object> dataMaps = new HashMap<>(8);
// 物业项目ID
Long projectId = templateCondition.getProjectId();
if (null == projectId) {
error(logger, "物业项目是必须的");
throw new ValidateFailureException(SYS_MODULE_HAP_REC, "物业项目是必须的");
}
// 查询物业项目数据
Project project = this.projectService.selectByPrimaryKey(null,
Project.PROTOTYPE.prototypeClone().setProjIdR(projectId));
// 判断是否查询到物业项目
if (null == project) {
error(logger, "当前选择的物业项目不存在");
throw new ProcessErrorException(SYS_MODULE_HAP_REC, "当前选择的物业项目不存在");
}
// 查询需要填充的数据
// 物业项目编码
dataMaps.put("projectCode", project.getProjCode());
// 物业项目名称
dataMaps.put("projectName", project.getProjName());
// 填充模板数据
Workbook workBook = transformer.transformXLS(templateFileInputStream, dataMaps);
// 设置响应结果的头信息
response.setContentType("application/x-download;charset=utf-8");
response.addHeader("Content-Disposition", "attachment;filename=[" + project.getProjCode() + "]" + templateFileName);
// 输出结果
workBook.write(responseOutputStream);
responseOutputStream.flush();
} catch (FileNotFoundException e) {
error(logger, "第三方导入模板文件未找到:" + templateFileName, e);
throw new ProcessErrorException(SYS_MODULE_HAP_REC, "第三方导入模板文件未找到:" + templateFileName, e);
} catch (IOException e) {
error(logger, "文件流异常", e);
throw new ProcessErrorException(SYS_MODULE_HAP_REC, "文件流异常", e);
} catch (InvalidFormatException e) {
error(logger, "第三方导入模板转换异常", e);
throw new ProcessErrorException(SYS_MODULE_HAP_REC, "第三方导入模板转换异常", e);
}
}
3. 入参实体
/**
* 下载模板请求参数
* @author xxx
*/
@Data
public class ImportTemplateCondition implements Serializable {
private static final long serialVersionUID = 4564033623863237721L;
@NotNull
private Long projectId;
}