赞
踩
流程:
注:遇到了一个大坑,这种方式目前只适用于idea直接跑的,打包成jar包之后就行不通了,目前还没有解决,希望大神们可以指导一下。
前端代码:
exportExcel(e){ //将excel写到target文件中 uni.request({ //访问后端接口,后端生成excel url:getApp().globalData.url+"/dhTask/exportExcelByProTaskId", data:{proTaskId:this.production_task_id}, method:"POST", header: { 'content-type':'application/x-www-form-urlencoded' ,'Authorization': uni.getStorageSync("token")}, success: (res) => { var data=res.data.data if(res.data.code==200){ console.log(" 后端返回的结果: "+res.data.data) //如果后端返回的结果是1, if(res.data.data==1){ uni.downloadFile({ //这里访问的是后端开放的静态资源路径 url: getApp().globalData.url+'/excel/'+this.production_task_id+'.xls', success: (res) => { console.log(res) let xlsFilePath=res.tempFilePath uni.saveFile({ tempFilePath:xlsFilePath, success:(res)=>{ // res.savedFilePath文件的保存路径 //保存成功并打开文件 uni.openDocument({ filePath:res.savedFilePath, success:(res)=>{ console.log('成功打开文档') this.getajax4("/dhTask/deleteExcel",{production_task_id:this.production_task_id},'post',function(a,b){ }) } }) }, fail:()=>console.log('下载失败') }) } }); } } },error(){ uni.showToast({title:"操作失败1!", icon:"none"}); return 0 } }) },
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
这个类是用来配置跨域问题的,实现了WebMvcConfigurer 接口,所以可以重写addResourceHandlers,所以就将addResourceHandlers写在这里了
package com.fusdom.config; import com.fusdom.utils.XmlUtils; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.ResourceUtils; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.io.File; import java.io.FileNotFoundException; //@Configuration注解 @Configuration //实现WebMvcConfigurer public class CrossDomainConfig implements WebMvcConfigurer { //重写addCorsMappings方法:这个是用来解决跨域问题的 @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowCredentials(true) .allowedOrigins("*") .allowedMethods("GET", "POST", "OPTIONS") .maxAge(3600); } //静态资源映射路径配置 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { String path=""; //这里是我用来处理jar包形式的 if(XmlUtils.class.getResource("").toString().contains("jar:")){ String projectPath = System.getProperty("user.dir"); path=new File(projectPath+"/classes/static/asserts/img/excel/").getPath()+"\\".replace("\\","\\\\"); //idea方式运行 }else{ //获取target下的文件的目录 path = XmlUtils.class.getResource("/static/asserts/img/excel/").getPath().substring(1).replace("file:", "").replace("/",File.separator); } registry.addResourceHandler("/excel/**").addResourceLocations("file:"+path); // registry.addResourceHandler("/excel/**").addResourceLocations("file:D:\\gitDownloader\\micro_services\\cloud_base\\target\\classes\\static\\asserts\\img\\excel\\"); WebMvcConfigurer.super.addResourceHandlers(registry); } }
//导出对应批次任务id的excel表格 @RequestMapping("/exportExcelByProTaskId") public Object exportExcelByProTaskId(String proTaskId) throws IOException { //此处获取对应的表格数据,可以自己写一个接口 List<Map<String, Object>> list = dhTaskService.getMsgByBatchTaskId(Long.valueOf(proTaskId)); /* * 使用java POI 创建excel文件,不清楚的话可以百度搜索一下如何使用 * */ //文档 HSSFWorkbook wb = new HSSFWorkbook(); //表单 HSSFSheet sheet = wb.createSheet("批次任务表"); //设置列宽度 sheet.setColumnWidth(10, 20 * 256); sheet.setColumnWidth(11, 20 * 256); //表头 HSSFRow row1 = sheet.createRow(0); row1.createCell(0).setCellValue("任务名称"); row1.createCell(1).setCellValue("产品名称"); row1.createCell(2).setCellValue("供应商"); row1.createCell(3).setCellValue("参数名称"); row1.createCell(4).setCellValue("等级"); row1.createCell(5).setCellValue("等级名称"); row1.createCell(6).setCellValue("下限"); row1.createCell(7).setCellValue("上限"); row1.createCell(8).setCellValue("数量"); row1.createCell(9).setCellValue("重量"); row1.createCell(10).setCellValue("任务开始时间"); row1.createCell(11).setCellValue("任务结束时间"); //行数据 for (int i = 0; i < list.size(); i++) { HSSFRow row = sheet.createRow(i + 1); row.createCell(0).setCellValue(list.get(i).get("production_task_name").toString()); row.createCell(1).setCellValue(list.get(i).get("product_name").toString()); row.createCell(2).setCellValue(list.get(i).get("company_name").toString()); row.createCell(3).setCellValue(list.get(i).get("param_name").toString()); row.createCell(4).setCellValue(list.get(i).get("rank_num").toString()); row.createCell(5).setCellValue(list.get(i).get("rank_name").toString()); row.createCell(6).setCellValue(list.get(i).get("lower_limit").toString()); row.createCell(7).setCellValue(list.get(i).get("upper_limit").toString()); row.createCell(8).setCellValue(list.get(i).get("number").toString()); row.createCell(9).setCellValue(list.get(i).get("weight").toString()); row.createCell(10).setCellValue(list.get(i).get("start_time").toString()); row.createCell(11).setCellValue(list.get(i).get("end_time").toString()); } //我这里是生成在target/classes下的文件路径的,所以处理的很麻烦, //建议大家可以写在固定的路径下,这样子处理就会容易很多了 try { String target =""; File targetFile=null; //如果打包成jar包的形式 if(XmlUtils.class.getResource("").toString().contains("jar:")){ String projectPath = System.getProperty("user.dir"); targetFile=new File(projectPath+"/classes/static/asserts/img/excel/"+ proTaskId + ".xls"); System.out.println("生成文件的目录>>>"+targetFile); //如果是以idea的方式运行 }else{ //获取target下的文件的目录 target = XmlUtils.class.getResource("/static/asserts/img/excel").getPath().replace("file:", ""); targetFile = new File(target + "/" + proTaskId + ".xls"); } //文件输出流 FileOutputStream targetOutput = new FileOutputStream(targetFile); //将文档写入流 wb.write(targetOutput); //记得flush() targetOutput.flush(); System.out.println(">>>>>>>>>>>>>>>>>执行完毕"); //关闭流 wb.close(); targetOutput.close(); //这里是我自己写的一些返回前端的实体类,大家可以自己写 return new CommonResult().success(1); } catch (Exception e) { return new CommonResult().success(-1); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。