目录
- 苍穹外卖day12
- 一:工作台
- 二:apachePOI
- 三:导出excel报表(最后一个功能!!)
- 总结(项目完结心得)
苍穹外卖day12
一:工作台
代码导入之后就是这样的效果,基本上是对原本的代码的调用,这里就不多赘述了;
二:apachePOI
1:写入:
public static void write() throws IOException {XSSFWorkbook excel = new XSSFWorkbook();XSSFSheet sheet = excel.createSheet("info");XSSFRow row = sheet.createRow(1);row.createCell(1).setCellValue("姓名");row.createCell(2).setCellValue("城市");XSSFRow row1 = sheet.createRow(2);row1.createCell(1).setCellValue("张三");row1.createCell(2).setCellValue("天津");FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\info.xlsx"));excel.write(fileOutputStream);excel.close();fileOutputStream.close();
}
首先创建一个excel对象,然后使用createSheet创建一个表单页面,使用createRow创建一行,使用setCellValue在这一行里添加数据,然后我们需要将这个excel中的内容导入到文件中,所以创建一个文件输入流,将excel的内容通过write写入;最后别忘记关闭资源;
2:读取:
public static void read()throws Exception {FileInputStream FileinputStream = new FileInputStream(new File("D:\\info.xlsx"));XSSFWorkbook sheets = new XSSFWorkbook(FileinputStream);XSSFSheet sheetAt = sheets.getSheetAt(0);int lastRowNum = sheetAt.getLastRowNum();for (int i = 1; i <=lastRowNum; i++) {XSSFRow row = sheetAt.getRow(i);String stringCellValue = row.getCell(1).getStringCellValue();String stringCellValue1 = row.getCell(2).getStringCellValue();System.out.println(stringCellValue1+" "+stringCellValue);}FileinputStream.close();sheets.close();
}
首先获取创建一个文件输出流,我们使用XSSFWorkbook对象将文件输出流中的对象获取到,然后获取到最后一行的行号,进行读取,我们要使用循环来读取:通过getSheetAt获取表单;通过getRow获取每一行,通过getCell获取行中指定的单元格,通过getStringCellValue将单元格的数据转成字符串;
三:导出excel报表(最后一个功能!!)
这里我们不用返回参数,最后是将文件通过文件输出流直接输出;
controller:
@GetMapping("/export")
public void export(HttpServletResponse response){reportService.export(response);
}
因为我们要将文件输出到浏览器上,所以要接收一个response对象,用于将其输出到浏览器中
service:
@Override
public void export(HttpServletResponse response) {LocalDate now = LocalDate.now();LocalDate begin = now.plusDays(-30);LocalDate end = now.plusDays(-1);BusinessDataVO businessDatapuls = workspaceService.getBusinessDatapuls(LocalDateTime.of(begin, LocalTime.MIN),LocalDateTime.of(end, LocalTime.MAX));InputStream resourceAsStream =this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");try {//填充报表数据XSSFWorkbook sheets = new XSSFWorkbook(resourceAsStream);XSSFSheet sheetAt = sheets.getSheetAt(0);sheetAt.getRow(1).getCell(1).setCellValue(begin+"--"+end+"营业数据");sheetAt.getRow(3).getCell(2).setCellValue(businessDatapuls.getTurnover());sheetAt.getRow(3).getCell(4).setCellValue(businessDatapuls.getOrderCompletionRate());sheetAt.getRow(3).getCell(6).setCellValue(businessDatapuls.getNewUsers());sheetAt.getRow(4).getCell(2).setCellValue(businessDatapuls.getValidOrderCount());sheetAt.getRow(4).getCell(4).setCellValue(businessDatapuls.getUnitPrice());for (int i = 7; i < 37; i++) {BusinessDataVO businessData = workspaceService.getBusinessData(begin);XSSFRow row = sheetAt.getRow(i);row.getCell(1).setCellValue(String.valueOf(begin));row.getCell(2).setCellValue(businessData.getTurnover());row.getCell(3).setCellValue(businessData.getValidOrderCount());row.getCell(4).setCellValue(businessData.getOrderCompletionRate());row.getCell(5).setCellValue(businessData.getUnitPrice());row.getCell(6).setCellValue(businessData.getNewUsers());begin=begin.plusDays(1);}ServletOutputStream outputStream = response.getOutputStream();sheets.write(outputStream);outputStream.close();sheets.close();} catch (IOException e) {throw new RuntimeException(e);}
}
service这部分比较复杂,总体上分为三个方面:1:获取数据;2:填充数据;3:输出至浏览器
1:我们之前再工作台导入的代码中有一个方法是返回我们的需要的这些数据的,我们调用那个方法getBusinessDatapuls获取数据,因为我们获取的数据是最近三十天,也就是从三十天前到昨天,我们通过plusDays来计算时间;2:然后要填充数据,我们首先要获取模板,我们将模板文件放置在项目文件下,通过类加载器的getResourceAsStream,获取这个文件的输入流,我们再创建一个XSSFWorkbook对象,将输出流放入其中,接下来就是对数据的封装了,我们按照行和单元格来为数据赋值,前面的概览数据,下面是每天的数据,每天的数据我们就要去调用方法获取到每一天的数据,我们可以使用for循环来完成这个操作,这需要对每一行的逻辑进行编写然后循环就行,3:然后我们再从response中获取输出流我们将excel表格输出进去就行,然后别忘了关闭资源;
总结(项目完结心得)
我是从大概10月13号开始跟着视频做项目,做到今天用了差不多10天左右,苍穹外卖是我学完javaweb做的第一个项目,真的感觉收获很多,过完整个项目让我大致熟悉了项目的开发流程,需求分析-阅读文档-开发代码-测试,让我熟悉了项目的crud,熟悉了mvc的三层架构,同时还让我们了解了一些新的技术,比如说用swagger来生成接口文档,redis的基本使用,微信小程序的开发流程,websocket实现双向通信等等,个人觉得非常适合做刚学完javaweb熟悉ssm操作的第一个项目,接下来我会去学习微服务,再深入了一下微服务,我还会去把苍穹外卖的前端给简单过一遍,虽然是后端但也得知道一点前端的东西。(附上一张完结撒花的图片,弹幕的网友真的是我坚持下去的动力之一,泪目)