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

建设一个网站流程滁州网站建设hi444

建设一个网站流程,滁州网站建设hi444,wordpress栏目改瀑布,如何设置代理服务器地址目录 环境要求 功能预览 需求分析 导入依赖 制作模板 编写代码 格式优化 最终效果 总结 在上一篇 EasyExcel模板导出与公式计算#xff08;上#xff09;-CSDN博客 文章中我们知道了在若依中使用自带的Excel注解来实现表格数据的导出#xff0c;并且通过重写相关接…目录 环境要求 功能预览 需求分析 导入依赖 制作模板 编写代码 格式优化 最终效果 总结 在上一篇 EasyExcel模板导出与公式计算上-CSDN博客 文章中我们知道了在若依中使用自带的Excel注解来实现表格数据的导出并且通过重写相关接口来支持导出公式的自动计算功能而在本文中我们将探究如何在带有自定义表头的定制化场景下如何实现表格数据的导出和公式的自动计算。 环境要求 若依Cloud 3.6.3 EasyExcel  3.3.2 功能预览 与上一篇文章相同这里继续以若依用户管理的导出功能为示例做一个简单的公式计算的验证大家可根据自己需求修改相应代码。 首先本地启动若依微服务版本登录后台依次选择系统管理 — 用户管理菜单进入如下页面 点击该页面的导出按钮 获取如下导出文件 现在如果我们想要在第四行计算第二和第三行用户编号的和可以直接在B4单元格输入A2A3这样的公式来实现可以注意到此时B4单元格中的公式颜色已经发生变化并且自动选中了A2和A3单元格但实际上我们的需求为从数据库表中导出的单元格实现自动计算结果接下来将通过若依前端页面来实现该功能验证。 现在需求变为除了能够正确计算单元格数据外还要变成像如下图的导出样式: 不难看出我们需要导出的结果有自定义的表头以及时间并且需要特别注意的是原本的计算公式由A2A3变为了A5A6这是因为新增了表头导致行号发生了变化接下来将针对这种需求进行实现。 需求分析 由于有了自定义标头的要求显然我们不能按照上一篇文章中直进行数据的导出因此我们将使用EasyExcel实现该功能 导入依赖 首先在ruoyi-common-core的pom.xml添加EaysExcel的依赖之所以添加到这里是因为该模块为通用核心模块会在项目中被其他的模块引用可以实现“一处添加多处使用”的效果。 !-- easyexcel --dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.3.2/version/dependency 制作模板 为了实现上述中的导出效果我们需要使用Excel制作一个用于导出的模板最终效果如下所示: 可以看到图中红色框所标识的是新增的表头内容其中时间后面的{dataDate} 则为填充对象而第5行对应的内容中除了花括号外还有一个点这其实是代表的是将使用对象集合填充与时间的dataDate区别为 dataDate仅为一个对象。 编写代码 由于我们使用了EasyExcel之后原有的导出功能需要做调整 Excel注解将被替换为ExcelProperty如下图所示其中value属性对应了我们的模板中的表头 对应Controller层的代码也需要做如下调整: Log(title 用户管理, businessType BusinessType.EXPORT)RequiresPermissions(system:user:export)PostMapping(/export)public void export(HttpServletResponse response, SysUser user){ListSysUser list userService.selectUserList(user);//ExcelUtilSysUser util new ExcelUtilSysUser(SysUser.class);//util.exportExcel(response, list, 用户数据);try(InputStream resourceAsStream SysUserController.class.getClassLoader().getResourceAsStream(UserExportTemplate.xlsx);ExcelWriter excelWriter EasyExcel.write(response.getOutputStream()).withTemplate(resourceAsStream).inMemory(true).build()) {response.setContentType(application/vnd.ms-excel);String filename URLEncoder.encode(用户管理数据导出,UTF-8);response.setHeader(Content-disposition,attachment;filenamefilename.xlsx);WriteSheet writeSheet EasyExcel.writerSheet().build();FillConfig fillConfig FillConfig.builder().forceNewRow(Boolean.TRUE).build();excelWriter.fill(list, fillConfig, writeSheet);MapString, Object map MapUtils.newHashMap();// 自定义日期map.put(dataDate, new Date());excelWriter.fill(map, writeSheet);// 拿到原始的Workbook对象Workbook workbook excelWriter.writeContext().writeWorkbookHolder().getWorkbook();// 获取已经填充的sheet对象Sheet userSheet workbook.getSheetAt(0);for(Row row : userSheet){for (Cell cell : row){if(cell.getCellType() CellType.STRING StringUtils.isNotBlank(cell.getStringCellValue()) cell.getStringCellValue().contains()){cell.setCellFormula(cell.getStringCellValue().substring(1));}}}// 关闭excelWriter.finish();} catch (IOException e) {e.printStackTrace();}} 我们首先获取到了用户信息的list对象 随后加载自定义的模板 UserExportTemplate.xlsx 使用EasyExcel 构建一个 WriteSheet 对象其作用为填充自定义的日期对象以及我们的查询的list对象待填充完成后。通过excelWriter再次获取到初始的WorkBook对象在这里就是如何解决公式自动计算的关键通过workBookt获取到Sheet对象后对其进行遍历依次获取到Row和Cell对象 这里的Cell对象就是我们的单元格而我们填值的单元格为String类型因此需要进行过滤并且此处需要特别注意去掉公式中原有的 符号否则会引发异常。最后需要使用finish方法关闭流。该方案来源于官方文档easyexcel模板填充后有公式的单元格不会自动计算而需要我手动算如何处理 | Easy Excel 官网 以及github上的 issue https://github.com/alibaba/easyexcel/issues/3242  格式优化 虽然上述内容已经解决了公式导出后无法自动计算的问题但是如果仔细观察就会发现有个问题可以进一步优化由于最开始填入的单元格公式为A2A3而当增加了自定义表头后此处内容应变为A5A6在Excel中这种情况会自动处理但在当前场景下只能通过手动方式去修正最终的单元格而如果带有公式的单元格非常多时就会变得非常麻烦因此可以通过如下代码进行调整: Log(title 用户管理, businessType BusinessType.EXPORT)RequiresPermissions(system:user:export)PostMapping(/export)public void export(HttpServletResponse response, SysUser user){ListSysUser list userService.selectUserList(user);//ExcelUtilSysUser util new ExcelUtilSysUser(SysUser.class);//util.exportExcel(response, list, 用户数据);try(InputStream resourceAsStream SysUserController.class.getClassLoader().getResourceAsStream(UserExportTemplate.xlsx);ExcelWriter excelWriter EasyExcel.write(response.getOutputStream()).withTemplate(resourceAsStream).inMemory(true).build()) {response.setContentType(application/vnd.ms-excel);String filename URLEncoder.encode(用户管理数据导出,UTF-8);response.setHeader(Content-disposition,attachment;filenamefilename.xlsx);WriteSheet writeSheet EasyExcel.writerSheet().build();FillConfig fillConfig FillConfig.builder().forceNewRow(Boolean.TRUE).build();excelWriter.fill(list, fillConfig, writeSheet);MapString, Object map MapUtils.newHashMap();// 自定义日期map.put(dataDate, new Date());excelWriter.fill(map, writeSheet);// 根据自定义表头调整公式int rowOffset 3;// 拿到原始的Workbook对象Workbook workbook excelWriter.writeContext().writeWorkbookHolder().getWorkbook();// 获取已经填充的sheet对象Sheet userSheet workbook.getSheetAt(0);for(Row row : userSheet){for (Cell cell : row){if(cell.getCellType() CellType.STRING StringUtils.isNotBlank(cell.getStringCellValue()) cell.getStringCellValue().contains()){// 获取当前单元格内容String formula cell.getStringCellValue();// 正则表达式匹配单元格引用 (例如 A1, B2 等)Pattern pattern Pattern.compile(([A-Z])(\\d));Matcher matcher pattern.matcher(formula);StringBuffer adjustedFormula new StringBuffer();while(matcher.find()) {// 列名 (A, B, ...)String column matcher.group(1);// 行号 (1, 2, ...)int rowNum Integer.parseInt(matcher.group(2));// 调整行号int adjustedRow rowNum rowOffset;// 替换原始引用为调整后的引用matcher.appendReplacement(adjustedFormula, column adjustedRow);}matcher.appendTail(adjustedFormula);// 重新设置公式cell.setCellFormula(adjustedFormula.substring(1));}}}// 关闭excelWriter.finish();} catch (IOException e) {e.printStackTrace();}} 此处通过在验证公式时使用正则匹配原有的公式并根据设置的 rowOffset 动态进行调整rowOffset为3是因为当前填入的公式从A2为基准开始因此偏移量为3而并非4使其能够正确计算结果。(此处代码也可抽取为方法在查询时list对象时直接使用) 最终效果 可以看到前端页面中填入的内容为A2A3而导出文件内容为A5A6并且打开导出的文件后自动计算了结果。 总结 对于具有自定义表头内容的导出需求需要使用EasyExcel工具实现功能增强并且需要先将内容写入到内容中之后再读取将公式进行进一步过滤转换去除等号调整行号进而实现导出文文件的计算功能根据官方文档所述该方案适用于文件小的场景当文件过大时将可能造成内存溢出的问题因此官方建议在Java层实现对公式的计算后再进行导出如果各位读者有更好的想法欢迎评论区留言探讨。
http://www.hkea.cn/news/14492064/

相关文章:

  • 青海个人旅游网站建设最简单仓库管理软件
  • 中国建设工程造价信息网站网站网站做代理赚钱吗
  • 什么事网站建设虚拟主机 视频网站
  • 如何提升网站的排名珠海做网站找哪家公司
  • 微信上发的链接网站怎么做的设计公司logo图标
  • asp.net网站开发是什么杭州外贸网站建设公司
  • 南昌网站设计网站开发怎么创建一个视频网站
  • 网站万能密码修复电子商务网络营销方式有哪些
  • 网站怎么修改好之后再上线wordpress主题屋
  • 淘宝客网站建设平台八年级上册信息书怎么做网站
  • 网站怎么做分站企业官网建设需要多少钱
  • 有网站想修改里面的内容怎么做网站和软件的区别
  • 静态网站建设的PPT免费的客户管理app
  • 金融集团网站模板加工平台纳米所
  • 各种网站名称大全珠海知名网站
  • 陶瓷企业 瓷砖地板公司网站建设怎样申请个人网站
  • 网站实名认证流程创意网页设计题库
  • 北京网站平台建设哪个网站做物业贷
  • 无锡专业网站营销网站推广目的
  • 产品的seo是什么意思百度关键词排名优化
  • 一个网站 二级域名搜索排名查询
  • 乘客电梯做推广的网站网站产品展示代码
  • 临沂网站建设方案书宁波企业网站开发
  • 中英西班牙网站建设腾讯云服务器免费体验
  • 哪里可以找到免费的网站如何给公司做一个网站
  • 谷歌推广外贸建站学网站建设工作
  • 东南亚营销型网站建设与网络推广制作简单的个人网站
  • 票务网站开发深圳画册设计排版
  • 全景地图网站开发那里可以建设网站
  • 如何做百度网站2017贵州建设职业技术学院网站查成绩