> 文章列表 > 外卖小程序11

外卖小程序11

外卖小程序11

目录

  • Apache POI
    • 介绍
    • 入门案例
      • maven坐标引入
      • 数据写入Excel文件
        • 代码开发
      • 读取Excel文件中的数据
        • 代码开发
    • 应用
      • 需求
      • 实现步骤
      • 代码实现
      • Controller层
        • ReportController
      • Service层
        • ReportService
        • Service层实现思路
        • ReportServiceImpl

Apache POI

介绍

Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。
一般情况下,POI 都是用于操作 Excel 文件。

入门案例

maven坐标引入

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

将数据写入Excel文件

代码开发

/* 测试使用POI将数据写入excel文件 @throws Exception*/@Testpublic void testWrite() throws Exception {//在内存中创建一个excel文件对象XSSFWorkbook excel = new XSSFWorkbook();//使用excel创建sheet页XSSFSheet sheet = excel.createSheet();//创建行,0代表第一行XSSFRow row1 = sheet.createRow(0);//创建单元格并赋值,1代表第二个单元格row1.createCell(0).setCellValue("姓名");row1.createCell(1).setCellValue("城市");XSSFRow row2 = sheet.createRow(1);row2.createCell(0).setCellValue("张三");row2.createCell(1).setCellValue("武汉");XSSFRow row3 = sheet.createRow(2);row3.createCell(0).setCellValue("李四");row3.createCell(1).setCellValue("广州");FileOutputStream out = new FileOutputStream("H:\\\\JavaProjects\\\\javaFrameWork\\\\sky-take-out\\\\shifan.xlsx");//通过输出流将内存中的excel文件写到磁盘上excel.write(out);//关闭资源out.flush();out.close();excel.close();}

读取Excel文件中的数据

代码开发

    /* 测试使用POI读取excel文件*/@Testpublic void testRead() throws Exception {FileInputStream in = new FileInputStream("H:\\\\JavaProjects\\\\javaFrameWork\\\\sky-take-out\\\\shifan.xlsx");//读取excel文件为对象XSSFWorkbook excel = new XSSFWorkbook(in);//获取第一个sheet页XSSFSheet sheet = excel.getSheetAt(0);//获取sheet页中最后一行的行号int lastRowNum = sheet.getLastRowNum();for (int i = 0; i <= lastRowNum; i++) {//获取当前行XSSFRow row = sheet.getRow(i);//获取单元格的文本值String cell1 = row.getCell(0).getStringCellValue();String cell2 = row.getCell(1).getStringCellValue();System.out.println(cell1 + " " + cell2);}in.close();excel.close();}

应用

需求

导出运营数据Excel报表

实现步骤

  1. 设计excel模板
  2. 查询数据
  3. 写入数据
  4. 输出流输出

代码实现

Controller层

ReportController

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

Service层

ReportService

    /* 导出运营数据报表 @param response*/void export(HttpServletResponse response);

Service层实现思路

将设计好的数据导出Excel文件模板添加到resource中去,使用模板文件在内存中创建一个excel对象,获取sheet页,查询需要的近30天的运营数据,然后根据下标为设计好的单元格赋值,数据写入完成后将excel对象通过输出流将文件下载到客户端浏览器中

ReportServiceImpl

/* 导出运营数据报表 @param response*/@Override@SneakyThrowspublic void export(HttpServletResponse response) {//获取运营数据报表模板InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");//在内存中以模板生成excel表格XSSFWorkbook excel = new XSSFWorkbook(in);//根据名称获取sheet页XSSFSheet sheet = excel.getSheet("sheet1");//计算起始,结束日期LocalDate begin = LocalDate.now().minusDays(30);LocalDate end = LocalDate.now().minusDays(1);//获取运营数据BusinessDataVO businessData = workspaceService.getBusinessData(LocalDateTime.of(begin, LocalTime.MIN), LocalDateTime.of(end, LocalTime.MAX));//设置第二行第二个单元格日期数据sheet.getRow(1).getCell(1).setCellValue(begin + "至" + end);//获取第四行XSSFRow row = sheet.getRow(3);//设置第3,5,7个单元格的数据row.getCell(2).setCellValue(businessData.getTurnover());row.getCell(4).setCellValue(businessData.getOrderCompletionRate());row.getCell(6).setCellValue(businessData.getNewUsers());//获取第五行XSSFRow row1 = sheet.getRow(4);//设置第3,5个单元格数据row1.getCell(2).setCellValue(businessData.getValidOrderCount());row1.getCell(4).setCellValue(businessData.getUnitPrice());//设置明细数据for (int i = 0; i < 30; i++) {LocalDate date = begin.plusDays(i);LocalDateTime beginTime = LocalDateTime.of(date, LocalTime.MIN);LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);//获取当天运营数据businessData = workspaceService.getBusinessData(beginTime, endTime);//获取行XSSFRow row2 = sheet.getRow(7 + i);row2.getCell(1).setCellValue(date.toString());row2.getCell(2).setCellValue(businessData.getTurnover());row2.getCell(3).setCellValue(businessData.getValidOrderCount());row2.getCell(4).setCellValue(businessData.getOrderCompletionRate());row2.getCell(5).setCellValue(businessData.getUnitPrice());row2.getCell(6).setCellValue(businessData.getNewUsers());}//获取响应输出流ServletOutputStream out = response.getOutputStream();//通过输出流输出excel表格excel.write(out);//关闭资源out.flush();out.close();excel.close();in.close();}