当前位置: 首页 > news >正文

excel表导出

dto:查询条件所在的类

  @GetMapping(value ="/downloadProject")@ApiOperation("导出台账数据")@AnonymousAccesspublic void queryDownload(Dto dto, HttpServletResponse response) throws IOException, ParseException {service.queryDownload(byPageDto, response);}

service方法

  @Transactionalpublic void queryDownload(Dto dto, HttpServletResponse response) throws IOException, ParseException {String tempPath = System.getProperty("java.io.tmpdir") + IdUtil.fastSimpleUUID() + ".xlsx";File file = new File(tempPath);MyExcelWriter writer = MyExcelWriter.getBigWriter();//重构字体格式等Font font = writer.createFont();font.setFontHeightInPoints((short) 15);font.setBold(true);CellStyle headCellStyle = writer.getHeadCellStyle();headCellStyle.setFont(font);//表头样式 参数:都是从0开始算 首行 尾行 首列 尾列 内容 是否使用样式writer.merge(32, "表名称");writer.merge(1, 3, 0, 0, "第一列", true);writer.merge(1, 3, 1, 1, "第二列", true);writer.merge(1, 3, 2, 2, "第三列", true);writer.merge(1, 3, 3, 3, "第四列", true);writer.merge(1, 1, 4, 8, "第五列", true);writer.merge(2, 3, 4, 4, "第六列", true);writer.merge(2, 3, 5, 5, "第七列", true);writer.merge(2, 3, 6, 6, "第八列", true);writer.merge(2, 3, 7, 7, "第九列", true);writer.merge(2, 3, 8, 8, "第十列", true);writer.merge(1, 1, 9, 13, "第十一列", true);writer.merge(2, 3, 9, 9, "第十二列", true);writer.merge(2, 3, 10, 10, "第十三列", true);writer.merge(2, 3, 11, 11, "第十四列", true);writer.merge(2, 3, 12, 12, "第十五列", true);writer.merge(2, 3, 13, 13, "第十六列", true);writer.merge(1, 3, 14, 14, "第十七列", true);writer.merge(1, 3, 15, 15, "第十八列", true);writer.merge(1, 3, 16, 16, "第十九列", true);writer.merge(1, 3, 17, 17, "第二十列", true);writer.merge(1, 1, 18, 19, "第二十一列", true);writer.merge(2, 3, 18, 18, "第二十二列", true);writer.merge(2, 3, 19, 19, "第二十三列", true);writer.merge(1, 1, 20, 26, "第二十四列", true);writer.merge(2, 3, 20, 20, "第二十五列", true);writer.merge(2, 3, 21, 21, "第二十六列", true);writer.merge(2, 3, 22, 22, "第二十七列", true);writer.merge(2, 2, 23, 26, "第二十八列", true);writer.writeCellValue(23, 3, "第二十九列"); //单个没法合并,用这种方法定义writer.writeCellValue(24, 3, "第三十列"); //单个没法合并,用这种方法定义writer.writeCellValue(25, 3, "第三十一列"); //单个没法合并,用这种方法定义writer.writeCellValue(26, 3, "第三十二列"); //单个没法合并,用这种方法定义writer.merge(1, 3, 27, 27, "第三十三列", true);writer.merge(1, 3, 28, 28, "第三十四列", true);writer.merge(1, 3, 29, 29, "第三十五列", true);writer.merge(1, 3, 30, 30, "第三十六列", true);writer.merge(1, 3, 31, 31, "第三十七列", true);writer.merge(1, 3, 32, 32, "第三十八列", true);//使用writeCellValue方法无法和merge一样传递参数true进行和表头同一样式,通过下面方法可以实现writer.getCell(23, 3).setCellStyle(headCellStyle);writer.getCell(24, 3).setCellStyle(headCellStyle);writer.getCell(25, 3).setCellStyle(headCellStyle);writer.getCell(26, 3).setCellStyle(headCellStyle);// 调整列宽writer.autoSizeColumnAll();Query query = getQuery(dto);List<Map<String, Object>> resultList = query.getResultList();List<List<Object>> rows = new ArrayList<>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");int i = 0; //显示在台账上的序号Integer j = 0; //判断是不是同一个numberfor (Map<String, Object> objectMap : resultList) {List<Object> list = new ArrayList<>();//例: list.add(objectMap.get("name") == null ? "" : objectMap.get("name").toString());list.add(i); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString().substring(0, 7)); list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString());  list.add(objectMap.get("字段名") == null ? "" : objectMap.get("字段名").toString()); ....rows.add(list);}//数据从第几行开始渲染writer.setCurrentRow(4);writer.write(rows, false);response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");response.setHeader("Content-Disposition", "attachment;filename=file.xlsx");ServletOutputStream out = response.getOutputStream();file.deleteOnExit();writer.flush(out, true);IoUtil.close(out);}

http://www.lryc.cn/news/159821.html

相关文章:

  • YOLOv8 快速入门
  • HJ48 从单向链表中删除指定值的节点
  • Java缓存理解
  • MHA高可用及故障切换
  • 1000元订金?华为折叠屏手机MateX5今日开始预订,售价尚未公布
  • Golang编写客户端SDK,并开源发布包到GitHub,供其他项目import使用
  • 手写Mybatis:第10章-使用策略模式,调用参数处理器
  • pair 是 C++ 标准库中的一个模板类,用于存储两个对象的组合
  • More Effective C++学习笔记(5)
  • SpringMVC之CRUD(直接让你迅速完成部署)
  • Github Copilot连接不上服务器
  • (数字图像处理MATLAB+Python)第十二章图像编码-第三、四节:有损编码和JPEG
  • 基于SpringBoot + Vue的项目整合WebSocket的入门教程
  • AI智能机器人的语音识别是如何实现的 ?
  • RabbitMQ: 死信队列
  • 232 - Crossword Answers (UVA)
  • MySQL表结构设计规范
  • 如何利用ProcessOn 做资产管理流程图
  • geopandas 笔记:geometry上的操作汇总
  • 【MongoDB】Ubuntu22.04 下安装 MongoDB | 用户权限认证 | skynet.db.mongo 模块使用
  • Python对象序列化
  • jmeter 准确的吞吐量定时器 Precise Throughput Timer
  • 后端/DFT/ATPG/PCB/SignOff设计常用工具/操作/流程及一些文件类型
  • jvm 程序计算器 程序计数器是否溢出 程序计数器是做什么的 java程序计数器会内存溢出吗 程序计数器作用与用处 jvm内存模型 jvm合集(一)
  • 关于近期小程序测试的常见漏洞演示
  • 磐基2.0部署apisix集群
  • Python requests爬虫豆瓣图片返回数据为空。
  • 【Spring事务的实现原理】
  • 摆动输入连杆夹持机构
  • C++——类与对象(下篇)