1、引入依赖包

 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.0.0</version></dependency>

2、控制层

 @ApiOperation(value = "导出项目信息表",  produces = "application/octet-stream")@PostMapping(value = "/downloadProjectExcel")public ResponseEntity<byte[]> downloadProjectExcel (@RequestBody List<String> ids) throws Exception {List<ProjectHtHkMo> list =  projectService.createProjectHtHkMosList(ids);ResponseEntity<byte[]> responseEntity = projectService.createProjectExcel(list);return responseEntity;};

3、接口层

 ResponseEntity<byte[]> createProjectExcel(List<ProjectHtHkMo> list) throws IOException;

4、实现层

 public ResponseEntity<byte[]> createProjectExcel(List<ProjectHtHkMo> list) throws IOException {File file = new File("D:\\projectjianshi\\项目信息表.xls");String name = file.getName();int c = 2+list.size();if (file.exists()) {file.delete();}Workbook sheets = new HSSFWorkbook();Sheet sheet = sheets.createSheet();sheets.setSheetName(0,"项目回款详情");CellStyle headCellStyle = sheets.createCellStyle();//创建单元格样式对象headCellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中//创建第一行Row row = sheet.createRow(0);for (int i = 0; i < 40; i++) {Cell cell = row.createCell(i);if(i==0){cell.setCellValue("合同信息");cell.setCellStyle(headCellStyle);}if (i == 9) {cell.setCellValue("项目信息");cell.setCellStyle(headCellStyle);}if (i == 21) {cell.setCellValue("回款信息");cell.setCellStyle(headCellStyle);}}//第二行Row row2 = sheet.createRow(1);//合同信息标题row2.setRowStyle(headCellStyle);row2.createCell(0).setCellValue("合同编号");row2.createCell(1).setCellValue("合同简称");row2.createCell(2).setCellValue("合同签订法人");row2.createCell(3).setCellValue("项目利润率");row2.createCell(4).setCellValue("合同额");row2.createCell(5).setCellValue("税率");row2.createCell(6).setCellValue("不含税金额");row2.createCell(7).setCellValue("合同签订时间");row2.createCell(8).setCellValue("市场区域");//项目信息标题row2.createCell(9).setCellValue("项目名称");row2.createCell(10).setCellValue("项目状态");row2.createCell(11).setCellValue("所属公司");row2.createCell(12).setCellValue("所属BU");row2.createCell(13).setCellValue("所属部门");row2.createCell(14).setCellValue("客户名称");row2.createCell(15).setCellValue("项目立项时间");row2.createCell(16).setCellValue("项目交付时间");row2.createCell(17).setCellValue("项目实际交付时间");row2.createCell(18).setCellValue("项目负责人");row2.createCell(19).setCellValue("项目财务经理");row2.createCell(20).setCellValue("项目客户经理");//回款信息表row2.createCell(21).setCellValue("年度合同应回款总计");row2.createCell(22).setCellValue("年度实际已回款总计");row2.createCell(23).setCellValue("年度实际回款率");int d1 = 23;List<HkMo> hks = list.get(0).getHks();for (HkMo hk : hks) {row2.createCell(d1++).setCellValue(hk.getHklx());row2.createCell(d1++).setCellValue("预计回款金额");row2.createCell(d1++).setCellValue("实际已回款");row2.createCell(d1++).setCellValue("实际回款时间");row2.createCell(d1++).setCellValue("当期超期未回");}//循环添加内容for (int i = 2; i < c; i++) {Row row1 = sheet.createRow(i);row1.setRowStyle(headCellStyle);int f = i-2;ProjectHtHkMo projectHtHkMo = list.get(f);row1.createCell(0).setCellValue(projectHtHkMo.getHtbh());row1.createCell(1).setCellValue(projectHtHkMo.getHtName());row1.createCell(2).setCellValue(projectHtHkMo.getHtqdfr());row1.createCell(3).setCellValue(projectHtHkMo.getLrl());row1.createCell(4).setCellValue(projectHtHkMo.getHtprice());row1.createCell(5).setCellValue(projectHtHkMo.getSl());row1.createCell(6).setCellValue(projectHtHkMo.getNhsPrice());row1.createCell(7).setCellValue(projectHtHkMo.getHtqdTime());row1.createCell(8).setCellValue(projectHtHkMo.getMarketArea());//项目信息row1.createCell(9).setCellValue(projectHtHkMo.getProjectname());row1.createCell(10).setCellValue(projectHtHkMo.getStatus());row1.createCell(11).setCellValue(projectHtHkMo.getBelongsgs());row1.createCell(12).setCellValue(projectHtHkMo.getBelongsbu());row1.createCell(13).setCellValue(projectHtHkMo.getBelongsbm());row1.createCell(14).setCellValue(projectHtHkMo.getCustomerunit());row1.createCell(15).setCellValue(projectHtHkMo.getInitiationtime());row1.createCell(16).setCellValue(projectHtHkMo.getCompletiontime());row1.createCell(17).setCellValue(projectHtHkMo.getSijftime());row1.createCell(18).setCellValue(projectHtHkMo.getProjectleader());row1.createCell(19).setCellValue(projectHtHkMo.getFinancemanager());row1.createCell(20).setCellValue(projectHtHkMo.getAccountmanager());row1.createCell(21).setCellValue(projectHtHkMo.getHks().get(0).getYearTotalTrice());row1.createCell(22).setCellValue(projectHtHkMo.getHks().get(0).getYearsjtotalprice());row1.createCell(23).setCellValue(projectHtHkMo.getHks().get(0).getYearsjhkl());List<HkMo> hks2 = projectHtHkMo.getHks();
//            HkMo hk = hks.get(0);int b= 23;for (HkMo hk : hks2) {row1.createCell(b++).setCellValue(hk.getFirsttime());row1.createCell(b++).setCellValue(hk.getYjhkprice());row1.createCell(b++).setCellValue(hk.getSjhkprice());row1.createCell(b++).setCellValue(hk.getSihktime());if (hk.getNoreturnprice() == null) {row1.createCell(b++).setCellValue(0.00);}else {row1.createCell(b++).setCellValue(hk.getNoreturnprice());}}}int i = sheet.addMergedRegion(new CellRangeAddress(0,0,0,8));sheet.addMergedRegion(new CellRangeAddress(0,0,9,20));sheet.addMergedRegion(new CellRangeAddress(0,0,21,48));OutputStream os = null;os = new FileOutputStream(file);sheets.write(os);os.flush();os.close();HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);//headers.setContentDispositionFormData("attachment",StringUtils.newStringIso8859_1(StringUtils.getBytesUtf8(file.getName()))));headers.setContentDispositionFormData("attachment", name=java.net.URLEncoder.encode(file.getName(), "UTF-8"));return new ResponseEntity<byte[]>(Files.toByteArray(file),headers, HttpStatus.CREATED);}

5、测试

6、成功

Springboot+poi实现浏览器下载excel文件相关推荐

  1. 解决浏览器下载excel文件时显示“文件已损坏”

    天天被学校的健康上报三个专业汇总搞得头大,一个班要截一个图,三个专业要十几个截图,一天三次,啊哈哈真是想快点毕业,其实健康系统上面有下载整个excel文件, but,每次点击导出之后,可以下载成功(我 ...

  2. poi 通过浏览器导出excel文件打不开

    本机excel版本大于2007 maven引入jar包配置 <dependency><groupId>org.apache.poi</groupId><art ...

  3. java导出excel 打不开,poi 通过浏览器导出excel文件打不开

    本机excel版本大于2007 maven引入jar包配置 org.apache.poi poi-ooxml 3.9 dom4j dom4j 代码controller层 MemberSchoolCon ...

  4. 解决不同浏览器下载excel文件中文名称乱码问题

    楼主多次测试发现,现在的三大主流浏览器(IE,Firefox,Chrome). IE浏览器对文件格式审查最严格,在从网页导出Excel的时候,需要对文件名称指定编码类型(UTF-8) HttpUtil ...

  5. IE浏览器下载excel文件时不弹出下载保存提示框的解决方法

    在IE浏览器中下载文件的时候,下载保存的提示框不弹出了,特意咨询了一下解决的方法,特来和大家分享. 1.打开"我的电脑"后请点击工具列的:"工具 -- 文件夹选项&quo ...

  6. ie8 ie浏览器下载excel文件乱码,变成压缩包,解决方案

    我的页面 <div id="page-content"><div>下载<a id="download" href="ja ...

  7. Springboot apache poi 浏览器下载 excel

    在日常干活中,经常会遇到后端实现下载文件的需求,将自己实现的步骤记录下来,以便以后查看方便或者帮助更多的同学. springboot POST 接口,支持浏览器下载excel文件,具体实现实现: 1. ...

  8. springboot访问下载/resource/static下的静态资源;下载excel文件损坏,打不开

    放文件 直接把文件放到resource下的static文件夹中 看编译结果 启动之后看看是否被编译了 访问,下载 然后在浏览器输入下面地址就能自动下载文件了 http://localhost:8002 ...

  9. SpringBoot实现利用浏览器下载文件

    SpringBoot实现利用浏览器下载文件 @RestController @RequestMapping("file") @Api(tags = "下载文件" ...

最新文章

  1. python在财务中的应用实训报告-实践应用|PyQt5制作雪球网股票数据爬虫工具
  2. java 处理byte_java - 文件到Java中的byte [] - 堆栈内存溢出
  3. 变量在内存中的值[c][code]
  4. aix 的c库为什么都是静态库_卢卡库:若梅罗、莱万都在努力突破极限,为什么我不能做到呢...
  5. 实现连接池技术的样例
  6. hadoop的安装需要java_Hadoop windows本地环境安装
  7. C++笔记-并发编程 异步任务(async)
  8. 【Python实例第30讲】F检验与互信息
  9. 树链剖分解析---WYD
  10. C语言【库函数与自定义函数】详解
  11. 常见随机变量的数学期望和方差
  12. 计算机国家级论文,计算机类期刊汇总(核心期刊,国家级期刊)
  13. html中的em的使用方法,css布局的em的使用方法
  14. 2019烟台计算机副高职称报名时间,烟台市公共企事业单位信息公开 政策文件 2019年度职称评审工作日程安排...
  15. AR增强现实技术解读
  16. t检验自由度的意义_在统计中自由度是什么?
  17. 华为OD机试 - 喊7的次数重排(Java JS Python)
  18. 图像控制点 形变_基于控制点的图像变形方法的研究与实现
  19. 基于Gitlab Issues为导向的分支管理
  20. 第六章 3D地形搭建(上)

热门文章

  1. 我眼中的大数据(五)——Spark
  2. 旅游品牌如何在中国进行移动APP推广?
  3. 将毫秒 换算成(天 时 分 秒 毫秒)
  4. 第14章 Linux的shell编程
  5. vue+three.js展示nrrd+vtk3D模型-vue框架集成(下)
  6. 日期累加(北京理工大学考研机试题)
  7. 关于滑雪问题的一些解法(综合自网络)
  8. 语义网的学习资源大汇集
  9. 代码报错看不懂!你还用有道词典吗?程序员已经用插件上高速了!
  10. Facial Expression Recognition by De-expression Residue Learning-论文笔记