• Excel报表


      (Apache POI) 入门案例 P164

    使用POI需要导入下面2个坐标:

    1. <dependency>
    2. <groupId>org.apache.poigroupId>
    3. <artifactId>poiartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>org.apache.poigroupId>
    7. <artifactId>poi-ooxmlartifactId>
    8. dependency>

    在sky-server\src\test\java\com\sky\test下面创建一个POITest类,写入如下代码:

     

    1. public class POITest {
    2. /*
    3. * 通过POI创建Excel文件并且写入文件内容
    4. * */
    5. @Test
    6. public void writeTest() throws IOException {
    7. //在内存中创建一个Excel文件
    8. XSSFWorkbook excel = new XSSFWorkbook();
    9. //在Excel文件中创建一个Sheet页
    10. XSSFSheet sheet = excel.createSheet("info");
    11. //在Sheet中创建行对象,rownum编号从0开始
    12. XSSFRow row = sheet.createRow(1); //1代表第2行
    13. row.createCell(1).setCellValue("姓名");//创建单元格写入内容
    14. row.createCell(2).setCellValue("城市");
    15. //创建一个新行
    16. row = sheet.createRow(2);//第3行
    17. row.createCell(1).setCellValue("张三");//创建单元格写入内容
    18. row.createCell(2).setCellValue("厦门");
    19. row = sheet.createRow(3);//第4行
    20. row.createCell(1).setCellValue("李四");//创建单元格写入内容
    21. row.createCell(2).setCellValue("南京");
    22. //上面写的都是在内存,现在想在磁盘看到
    23. FileOutputStream out = new FileOutputStream(new File("C://software/info.xlsx"));//设置文件
    24. excel.write(out);//写入到文件
    25. //关闭资源
    26. out.close();
    27. excel.close();
    28. }
    29. }

    最终效果如下: 

     

     

    3.7 (Apache POI) 入门案例 P165

    文本读取出来。

    在sky-server\src\test\java\com\sky\test下面的POITest类,写入如下代码:

    1. @Test
    2. public void readTest() throws IOException{
    3. FileInputStream in = new FileInputStream(new File("C://software/info.xlsx"));
    4. //读取磁盘上已经存在的Excel文件
    5. XSSFWorkbook excel = new XSSFWorkbook(in);
    6. //读取Excel文件中的第一个Sheet页
    7. XSSFSheet sheet = excel.getSheetAt(0);
    8. //获取Sheet中最后一行行号
    9. int lastRowNum = sheet.getLastRowNum();
    10. for(int i=1;i<=lastRowNum;i++){
    11. //获得某一行
    12. XSSFRow row = sheet.getRow(i);
    13. //获得单元格对象
    14. String cellValue1 = row.getCell(1).getStringCellValue();
    15. String cellValue2 = row.getCell(2).getStringCellValue();
    16. System.out.println(cellValue1+" "+cellValue2);
    17. }
    18. //关闭资源
    19. in.close();
    20. }

     

     

    3.8 (导出Excel表) 分析设计 P166

    导出Excel形式的报表文件;导出最近30天的运营数据。

     

     

    接口没有返回数据,导出报表本底是文件下载。服务端会通过输出流将Excel文件下载到客户端浏览器。

     一般是先创建原始的Excel文件,这个文件被称为模板文件,先设置好包括颜色和字体等。

    步骤:①设计Excel模板文件②查询近30天的运营数据③将查询到的运营数据写入模板文件④通过输出流将Excel文件下载到客户端浏览器。下面这个是模板文件

     

    在sky-server的service层的ReportService接口,写入如下代码: 

    先在resources下面创建一个template包,然后把运营数据报表模块.xlsx复制进去。 

     

    3.9 (导出Excel表) 代码开发 P167 P168 P169

    在sky-server的controller层的admin下的ReportController类,写入如下代码:

    1. //导出运营数据报表
    2. @GetMapping("/export")
    3. @ApiOperation("导出运营数据报表")
    4. public void export(HttpServletResponse response){
    5. reportService.exportBusinessData(response);
    6. }

     在sky-server的service层的ReportService接口,写入如下代码:

    void exportBusinessData(HttpServletResponse response);

     在sky-server的service层的Impl下的ReportServiceImpl类,写入如下代码:

    1. @Autowired
    2. private WorkspaceService workspaceService;
    3. //统计指定时间区间内的销量排名前10
    4. public SalesTop10ReportVO getSalesTop10(LocalDate begin, LocalDate end) {
    5. LocalDateTime beginTime = LocalDateTime.of(begin, LocalTime.MIN);
    6. LocalDateTime endTime = LocalDateTime.of(end,LocalTime.MAX);
    7. List salesTop10 = orderMapper.getSalesTop10(beginTime, endTime);
    8. List names = salesTop10.stream().map(GoodsSalesDTO::getName).collect(Collectors.toList());
    9. String nameList = StringUtils.join(names, ",");
    10. List numbers = salesTop10.stream().map(GoodsSalesDTO::getNumber).collect(Collectors.toList());
    11. String numberList = StringUtils.join(numbers, ",");
    12. return SalesTop10ReportVO.builder().nameList(nameList).numberList(numberList).build();
    13. }
    14. @Autowired
    15. private WorkspaceService workspaceService;
    16. //导出运营数据报表
    17. public void exportBusinessData(HttpServletResponse response){
    18. //1.查询数据库,获取营业数据--查询最近30天的运营数据
    19. LocalDate dateBegin = LocalDate.now().minusDays(30); //减30天的时间
    20. LocalDate dateEnd = LocalDate.now().minusDays(1);
    21. BusinessDataVO businessDatavo = workspaceService.getBusinessData(LocalDateTime.of(dateBegin, LocalTime.MIN), LocalDateTime.of(dateEnd, LocalTime.MAX));
    22. //2.通过POI将数据写入到Excel文件中
    23. InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");//在类路径下读取资源返回输入流对象
    24. try {
    25. //基于模板文件创建一个新的Excel文件
    26. XSSFWorkbook excel = new XSSFWorkbook(in);
    27. //获取表格文件的Sheet文件
    28. XSSFSheet sheet = excel.getSheet("Sheet1");
    29. //填充数据--时间
    30. sheet.getRow(1).getCell(1).setCellValue("时间:"+dateBegin+"至"+dateEnd);
    31. //获得第4行
    32. XSSFRow row = sheet.getRow(3);
    33. row.getCell(2).setCellValue(businessDatavo.getTurnover()); //第3个单元格
    34. row.getCell(4).setCellValue(businessDatavo.getOrderCompletionRate());
    35. row.getCell(6).setCellValue(businessDatavo.getNewUsers());
    36. //获得第5行
    37. row = sheet.getRow(4);
    38. row.getCell(2).setCellValue(businessDatavo.getValidOrderCount());
    39. row.getCell(4).setCellValue(businessDatavo.getUnitPrice());
    40. //填充明细数据
    41. for(int i=0;i<30;i++){
    42. LocalDate date = dateBegin.plusDays(i);
    43. //查询某一天的营业数据
    44. workspaceService.getBusinessData(LocalDateTime.of(date,LocalTime.MIN),LocalDateTime.of(date,LocalTime.MAX));
    45. //获得某一行
    46. row = sheet.getRow(7+i);
    47. row.getCell(1).setCellValue(date.toString());
    48. row.getCell(2).setCellValue(businessDatavo.getTurnover());
    49. row.getCell(3).setCellValue(businessDatavo.getValidOrderCount());
    50. row.getCell(4).setCellValue(businessDatavo.getOrderCompletionRate());
    51. row.getCell(5).setCellValue(businessDatavo.getUnitPrice());
    52. row.getCell(6).setCellValue(businessDatavo.getNewUsers());
    53. }
    54. //3.通过输出流将Excel文件下载到客户端浏览器
    55. ServletOutputStream out = response.getOutputStream();
    56. excel.write(out);
    57. //关闭资源
    58. out.close();
    59. excel.close();
    60. } catch (IOException e) {
    61. throw new RuntimeException(e);
    62. }
    63. }
    3.12 (导出Excel表) 功能测试 P170

    点击数据导出后会有一个xlsx文件被下载下来

     

  • 相关阅读:
    手把手搭建springboot项目,并测试springDataJPA
    智慧经营| 物业数字化管理系统
    OPTEE:TA镜像的签名和加载-下(六)
    达梦数据库运维手册-个人笔记
    Linux Centos/Debian NFS服务器查询搭建与配置
    本周大新闻|传Cambria采用升级版XR2芯片,TGS增设VR虚拟展厅
    408强化(番外)文件管理
    Linux系统中让$前面显示完整的路径
    lotus 检索数据 filecoin.tools
    C++动态库调试技巧
  • 原文地址:https://blog.csdn.net/m0_72015215/article/details/139711286