添加依赖
下面是 依赖代码片
。
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.0.3</version>
</dependency>
核心业务
- 前端页面
- 创建文件模板
第一张图红色标记的地方,是我们需要后台填充的数据,第二张图是模板在项目里的存放路径,后面需要读取该路径。excel的语法具体可以参考利用模板语法快速生成 Excel 报表 - 导出至指定路径,并打包压缩的后台实现
public void createProjectMaterialVisible(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException, UnsupportedEncodingException {
//创建存放模板数据的对象
Map<String, Object> dataMap =new HashMap<>();
//创建一个模板对象
TemplateExportParams tempParams=null;
String projectName = String.valueOf(params.get("projectName"));
String projectNumber = String.valueOf(params.get("projectNumber"));
//将数据存放到dataMap中,这里的key(projectName,projectNumber)要与模板中定义的名称保持一致,后面有更多的key也是一样
dataMap.put("projectName", projectName);
dataMap.put("projectNumber", projectNumber);
//前端选择的文件
String fileType = (String) params.get("fileType");
String fileUrl=null;
//定义一个文件导出存放的路径
String excelPath="D:/"+projectName+"["+projectNumber+"]"+"项目资料";
if (StringUtils.isNotBlank(fileType)) {
String[] fileTypeArray = String.valueOf((String) params.get("fileType")).split(",");
if (fileTypeArray.length > 0) {
for(String x : fileTypeArray){
List<FileDownloadHistoryExcel> dataList = Lists.newArrayList();
if(x.equals("1")){
//找到模板的存放路径
tempParams= new TemplateExportParams("TemplateFiles/招标文件领取表.xls");
//这边是业务需要的逻辑
String url = interfaceUtil.getBaseUrl() + "/sys/fileDownloadHistory/getListByProjectId";
JSONObject res = HttpsUtils.doGet(url, params);
System.out.print("----------------------------" + res);
if (null != res) {
Map<String, String> resMap = CommenUtil.jsonStrToMap(res.toJSONString());
JSONArray list = JSONArray.parseArray(resMap.get("data"));
if (list.size() > 0) {
//创建需要下载的excel对象
FileDownloadHistoryExcel excel;
for (int i = 0; i < list.size(); i++) {
excel = new FileDownloadHistoryExcel();
//将数据放入excel中
excel.setProjectName(String.valueOf(list.getJSONObject(i).get("projectName")));
excel.setProjectNumber(String.valueOf(list.getJSONObject(i).get("projectNumber")));
excel.setSupplierName(String.valueOf(list.getJSONObject(i).get("supplierName")));
excel.setProjectContacts(String.valueOf(list.getJSONObject(i).get("projectContacts")));
excel.setContactInformation(String.valueOf(list.getJSONObject(i).get("contactInformation")));
excel.setMailbox(String.valueOf(list.getJSONObject(i).get("mailbox")));
excel.setDownloadTime(null == list.getJSONObject(i).get("downloadTime") ? null : String.valueOf(list.getJSONObject(i).get("downloadTime")));
dataList.add(excel);
}
}
}
//将excel放入定义好的对象中
dataMap.put("dataList", dataList);
}else if(x.equals("2")){
tempParams=new TemplateExportParams("TemplateFiles/投标文件送达登记表.xls");
}else if(x.equals("3")){
tempParams=new TemplateExportParams("TemplateFiles/现场承诺书.docx");
}else if(x.equals("4")){
tempParams=new TemplateExportParams("TemplateFiles/报价确认表.xls");
}
if(x.equals("2") || x.equals("4")){
String url = interfaceUtil.getBaseUrl() + "/sys/HistoricalBidding/list";
JSONObject res = HttpsUtils.doGet(url, params);
JSONArray supplierArr = res.getJSONArray("data");
FileDownloadHistoryExcel excel;
if(supplierArr.size()>0){
for (int j = 0; j < supplierArr.size(); j++) {
excel = new FileDownloadHistoryExcel();
String supplierName=supplierArr.getJSONObject(j).getString("supplierName");
excel.setSupplierName(supplierName);
dataList.add(excel);
}
dataMap.put("dataList", dataList);
}
}
if(x.equals("3")){
//这边是word的导出方法,也很简单,主要是定义一个XWPFDocument对象,再调用WordExportUtil.exportWord07()方法
XWPFDocument doc = null;
try {
doc = WordExportUtil.exportWord07("TemplateFiles/现场承诺书.docx", dataMap);
FileOutputStream fos = new FileOutputStream(excelPath+"/现场承诺书.docx");
doc.write(fos);
} catch (Exception e) {
e.printStackTrace();
}
}else{
//这里是将数据导入至excel模板中
Workbook workbook = ExcelExportUtil.exportExcel(tempParams, dataMap);
File savefile = new File(excelPath+"/");
if (!savefile.exists()) {
savefile.mkdirs();
}
//这是要保证你的文件路径的正确性,否则就会报错找不到该系统路径
if(x.equals("1")){
fileUrl=excelPath+"/招标文件领取表.xls";
}else if(x.equals("2")){
fileUrl=excelPath+"/投标文件送达登记表.xls";
}else if(x.equals("4")){
fileUrl=excelPath+"/报价确认表.xls";
}
FileOutputStream fos = new FileOutputStream(fileUrl);
try {
workbook.write(fos);
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//压缩4个附件
ZipUtil.zip(excelPath);
String zipFileName = excelPath+".zip";
File zipFile = new File(zipFileName);
BufferedInputStream bins=new BufferedInputStream(new FileInputStream(zipFile));
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/x-download");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(zipFile.getName(), "UTF-8"));
ServletOutputStream out1 = null;
try {
//这边直接压缩并且在浏览器下载
out1 = response.getOutputStream();
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
out1.write(buffer, 0, bytesRead);
}
out1.flush();
bins.close();
out1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 文件直接在浏览器端下载实现
public void exportPromise(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {
ModelMap modelMap = new ModelMap();
Map<String, Object> dataMap = Maps.newHashMap();
//给模板填充内容,key与模板中定义的名称一样
String projectName = String.valueOf(params.get("projectName"));
String projectNumber = String.valueOf(params.get("projectNumber"));
dataMap.put("projectName", projectName);
dataMap.put("projectNumber", projectNumber);
modelMap.put(TemplateWordConstants.FILE_NAME,"自定义的文件名");
//找到自己的模板路径
modelMap.put(TemplateWordConstants.URL,"TemplateFiles/promiseReport.docx");
modelMap.put(TemplateWordConstants.MAP_DATA, dataMap);
PoiBaseView view = new EasypoiTemplateWordView();
try {
//一行代码直接下载
view.render(modelMap, request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
直接下载就超级简单,这边给的简单的模板,如果模板里是集合的话,就参照上面的excel的 数据添加部分。
导出excel和word的核心代码大致就是这些了,有问题欢迎提出来,一起探讨学习。喜欢的可以点赞收藏,哈哈哈,这是我继续更博的动力呀
版权声明:本文为qq_34615122原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。