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

温江做网站公司厦门住房和建设局网站

温江做网站公司,厦门住房和建设局网站,网站群的建设策略,wordpress调样式前言: 今天写Day12的内容。也是最后一天的课程内容。 今日所学: Apache POI导出运营数据Excel报表 1. Apache POI 1.1 介绍 Apache POI(Poor Obfuscation Implementation的递归缩写)是一个开源的Java API,用于处理…

前言:

今天写Day12的内容。也是最后一天的课程内容。

今日所学:

  • Apache POI
  • 导出运营数据Excel报表

1. Apache POI

1.1 介绍

Apache POI(Poor Obfuscation Implementation的递归缩写)是一个开源的Java API,用于处理Microsoft Office格式文件。它允许Java程序读取、写入和操作Microsoft Office文档,包括Excel、Word和PowerPoint文件。

一句话总结:

Apache POI是一个用于读写Microsoft Office格式文件(如Excel、Word、PPT)的Java开源库。

1.2 如何在Java项目中使用

这里以读写excel表格为例

1.2.1. 引入相关的依赖

先是基础依赖

另外还有excel支持依赖

1.2.2. 对excel表格进行读写操作

导入相应的坐标就可以对excel表格进行读写操作了

这里我们先讲写操作

1. 内存中创建一个Excel文件

2.在excel文件中创建一个sheet页

3.在sheet页中指定行,并且给指定行的指定单元格赋值(这里注意行和单元格的索引都是从零开始的,也就是零是第一行)

4.通过数据流fileout将excel表格写入到磁盘,并关闭相应操作

具体代码

/*** 通过POI去写Excel文件* @throws IOException*/
public static void write() throws IOException {// 在内存张创建一个Excel文件XSSFWorkbook workbook = new XSSFWorkbook();// 在excel文件中创建一个sheet页XSSFSheet sheet = workbook.createSheet("info");// sheet中创建对象,Row编号从零开始XSSFRow row = sheet.createRow(0);row.createCell(0).setCellValue("姓名");row.createCell(1).setCellValue("城市");row = sheet.createRow(1);row.createCell(0).setCellValue("张三");row.createCell(1).setCellValue("南京");row = sheet.createRow(2);row.createCell(0).setCellValue("李四");row.createCell(1).setCellValue("芜湖");// 通过数据流将内存中的ECcel文件给它写入到磁盘FileOutputStream fileOut = new FileOutputStream("D:\\ExcelData\\info.xlsx");workbook.write(fileOut);fileOut.close();workbook.close();
}
public static void main(String[] args) throws Exception {//read();write();
}

接下来是读操作

1. 通过输入流传入相应的文件给excel对象

2.获得想读取数据的那一页sheet,并获得载有数据的最后一行

3. 从第一行开始遍历row,获得每一行的数据并输出

4.关闭相应操作

具体代码:

/*** 通过POI去读取Excel文件* @throws IOException*/
public static void read() throws IOException {// 创建excel对象,找到相应的excel表格FileInputStream fileIn = new FileInputStream("D:\\ExcelData\\info.xlsx");XSSFWorkbook workbook = new XSSFWorkbook(fileIn);XSSFSheet sheet = workbook.getSheetAt(0);// 获得最后一行int lastRowNum = sheet.getLastRowNum();// 遍历for (int i = 0; i <= lastRowNum; i++) {XSSFRow row = sheet.getRow(i);if (row != null) {String stringCellValue = row.getCell(0).getStringCellValue();String stringCellValue1 = row.getCell(1).getStringCellValue();System.out.println(stringCellValue + " " + stringCellValue1);}}fileIn.close();workbook.close();
}public static void main(String[] args) throws Exception {read();// write();
}

运行效果:

2.导出运营数据Excel报表

需求分析:

业务规则:

  • 导出Excel形式的报表文件
  • 导出最近30天的运营数据
  • 导出最近30天每日的明细数据

需要注意的是这个接口功能不传入和返回任何数据

代码展示:

admin包下的ReportController类下(Controller层)写入以下代码:

/*** 导出运营数据报表* @param response* @return*/
@GetMapping("/export")
@ApiOperation("导出运营数据报表")
public void export(HttpServletResponse response){reportService.exportBusinessData(response);
}

要注意的是虽然接口不传入任何参数,但是我们可以传入一个httpServletResponse用于将excel文件下载到客户端浏览器

service层:

具体的代码逻辑:

1. 将时间回溯到30天前,查看30天前到现在的营业数据(营业额,订单完成率,新增用户数,有效订单,平均客单价,这些都是封装到BusinessDataVo的数据)

2. 通过POI写入到Excel文件中(填充概览数据->30天的总数据

先是通过输入流传入相应的文件给excel对象(这边输入流加载文件用的是类加载器),调用workspaceService.getBusinessData方法,最后获取sheet->row->填充相应的ceil单元格

3.通过POI写入到Excel文件中(填充明细数据->30天内每天的数据

在前一步excel对象的基础上,for循环得到30天内每天的日期,将其依次调用workspaceService.getBusinessData方法,获取sheet->row->填充相应的ceik单元格

4.通过输出流将Excel文件下载到相应的客户端浏览器

5.关闭相应资源

/*** 导出运营数据报表* @param response*/
@Override
public void exportBusinessData(HttpServletResponse response) {// 1, 查询数据库,获取营业数据 ... 查询30天的运营数据// 前面30天LocalDate begin = LocalDate.now().minusDays(30);LocalDate end = LocalDate.now().minusDays(1);LocalDateTime beginTime = LocalDateTime.of(begin, LocalTime.MIN);LocalDateTime endTime = LocalDateTime.of(end, LocalTime.MAX);BusinessDataVO businessData = workspaceService.getBusinessData(beginTime, endTime);// 2.通过POI写入到Excel文件中InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");try {// 基于模板文件创建一个新的Excel文件XSSFWorkbook workbook = new XSSFWorkbook(in);// 获取表格的sheet页面XSSFSheet sheet = workbook.getSheetAt(0);// 填充数据--时间sheet.getRow(1).getCell(1).setCellValue("时间" + beginTime + "至" + endTime);// 获得第4行XSSFRow row = sheet.getRow(3);row.getCell(2).setCellValue(businessData.getTurnover());row.getCell(4).setCellValue(businessData.getOrderCompletionRate());row.getCell(6).setCellValue(businessData.getNewUsers());// 获得第5行XSSFRow row1 = sheet.getRow(4);row1.getCell(2).setCellValue(businessData.getValidOrderCount());row1.getCell(4).setCellValue(businessData.getUnitPrice());// 填充我们的明细数据for (int i = 0; i < 30; i++) {begin = begin.plusDays(i);BusinessDataVO businessDataVO = workspaceService.getBusinessData(LocalDateTime.of(begin, LocalTime.MIN), LocalDateTime.of(begin, LocalTime.MAX));// 接收每一行的数据XSSFRow row2 = sheet.getRow(7 + i);// 获取单元格row2.getCell(1).setCellValue(begin.toString());row2.getCell(2).setCellValue(businessDataVO.getTurnover());row2.getCell(3).setCellValue(businessDataVO.getValidOrderCount());row2.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());row2.getCell(5).setCellValue(businessDataVO.getUnitPrice());row2.getCell(6).setCellValue(businessDataVO.getNewUsers());}// 3.通过输出流将Excel文件下载到客户端浏览器ServletOutputStream outputStream = response.getOutputStream();workbook.write(outputStream);// 关闭资源outputStream.flush();outputStream.close();workbook.close();}catch (Exception e) {e.printStackTrace();}
}

这里都是调用写好的方法,所以没有用到mapper层

问题:

1.在Controller层我将result.success()作为了返回数据

导致生成的excel文件是这样的

2.在关闭输出流outputStream时,没有使用flush强制将缓冲区的数据写入目标

导致生成的excel文件是空的

最后:

今天的分享就到这里。如果我的内容对你有帮助,请点赞评论收藏。创作不易,大家的支持就是我坚持下去的动力!(๑`・ᴗ・´๑)


文章转载自:

http://LwwMGIxZ.ckdgj.cn
http://d5jntsdH.ckdgj.cn
http://zt4tZeAd.ckdgj.cn
http://JqfthTPc.ckdgj.cn
http://e4Jcs0U8.ckdgj.cn
http://k4Z7fTmf.ckdgj.cn
http://YCDDwIRT.ckdgj.cn
http://f3USyySL.ckdgj.cn
http://0mK11GYc.ckdgj.cn
http://2EOgu8kk.ckdgj.cn
http://79kpgseZ.ckdgj.cn
http://aMYUVDF2.ckdgj.cn
http://N1BelhPJ.ckdgj.cn
http://Mrs7miZ4.ckdgj.cn
http://kCeUSLd2.ckdgj.cn
http://JqwmhVAo.ckdgj.cn
http://swRQXEIA.ckdgj.cn
http://Icy4terO.ckdgj.cn
http://przP6SwE.ckdgj.cn
http://O4vcdoUO.ckdgj.cn
http://3WrGCntz.ckdgj.cn
http://AT6qxfKB.ckdgj.cn
http://Xtx74tgk.ckdgj.cn
http://Iyg29s0X.ckdgj.cn
http://0tjVN6fQ.ckdgj.cn
http://cHvPsAlo.ckdgj.cn
http://KU4jywzL.ckdgj.cn
http://8v8WEfsz.ckdgj.cn
http://OJsYeIKq.ckdgj.cn
http://v7POGvRo.ckdgj.cn
http://www.dtcms.com/wzjs/690860.html

相关文章:

  • 杨浦网站建设纯静态网站页面优化
  • 网站qq代码生成wordpress restfulapi
  • app下载安装官方网站水果网页制作模板
  • 用html做的游戏网站wordpress怎么装主题
  • flash网站案例网站建设平台选用
  • 手机版免费申请微网站开个小门面装修找谁
  • 企业网站属于广告吗外贸企业网站评价案例
  • 做网站用的文本编辑器龙胜网站建设公司
  • 企业网站建设费用记入网站哪个公司做
  • 网站整套模板网站的网络设计公司
  • 织梦网站导入链接怎么做深圳集团网站建设案例
  • 织梦后台如何做网站地图免费发布信息平台
  • iis网站发布教程阿里云做的网站程序员
  • 想在微信公众号上做网站链接WordPress高级微信机器人
  • 资源下载网站wordpress河津网站建设网站建设
  • 网站建设项目管理盐城网站建设hx1818
  • 青海省教育厅门户网站学籍查询青岛工程建设监理公司网站
  • 建设一个好的网站多php网站空间
  • 成品网站10款莆田网站建设方法
  • 网站开发 pptcnn头条新闻
  • 西宁最好网站建设公司哪家好电商详情页设计教程
  • 免费网站制作在线网站如何做品牌宣传
  • 做网站找我只做网站不做app
  • 网站首页被k 做跳转php网页制作工具
  • 这几年做啥网站致富wordpress官方文档下载
  • seo网站制作优化做食品网站需要什么
  • 微信在线登录网页版seo在线工具
  • 建设产品信息网站网站建设开发 脚本语言
  • 做网站需要什么样的电脑配置wordpress crm 主题
  • 深圳网站建设 设计首选公司qq空间搬家wordpress