外卖开发(九)——Excel数据报表ApachePOI

外卖开发(九)------Excel数据报表

一、ApachePOI

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

一般情况下,POI都是用于操作 Excel文件。

maven坐标

bash 复制代码
<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

java 复制代码
//在内存中创建一个Excel文件对象
XSSFWorkbook excel = new XSSFWorkbook();

//创建Sheet页
XSSFSheet sheet = excel.createSheet("itcast");

//在Sheet页中创建行,0表示第1行
XSSFRow row1 = sheet.createRow(0);

//创建单元格并在单元格中设置值,单元格编号也是从0开始,1表示第2个单元格
row1.createCell(1).setCellValue("姓名");
row1.createCell(2).setCellValue("城市");
XSSFRow row2 = sheet.createRow(1);
row2.createCell(1).setCellValue("张三");
row2.createCell(2).setCellValue("北京");
XSSFRow row3 = sheet.createRow(2);
row3.createCell(1).setCellValue("李四");
row3.createCell(2).setCellValue("上海");
FileOutputStream out = new FileOutputStream(new File("D:\\itcast.xlsx"));

//通过输出流将内存中的Excel文件写入到磁盘上
excel.write(out);

//关闭资源out.flush();
out.close();
excel.close();

读取Excel中的数据:

java 复制代码
FileInputStream in = new FileInputStream(new File("D:\\itcast.xlsx"));
//通过输入流读取指定的Excel文件
XSSFWorkbook excel = new XSSFWorkbook(in);

//获取Excel文件的第1个Sheet页
XSSFSheet sheet = excel.getSheetAt(0);

//获取Sheet页中的最后一行的行号
int lastRowNum = sheet.getLastRowNum();

for (int i = 0; i <= lastRowNum; i++) {
	//获取Sheet页中的行
	XSSFRow titleRow = sheet.getRow(i);
	//获取行的第2个单元格
	  XSSFCell cell1 = titleRow.getCell(1);
	//获取单元格中的文本内容
	String cellValue1 = cell1.getStringCellValue();
	//获取行的第3个单元格
	XSSFCell cell2 = titleRow.getCell(2);
	//获取单元格中的文本内容
	String cellValue2 = cell2.getStringCellValue();
	System.out.println(cellValue1 + " " +cellValue2);
}

//关闭资源
in.close();
excel.close();

运行效果:

三、导出运营数据报表





1、ReportController

java 复制代码
/**
     * 导出数据报表
     * @param response
     */
    @GetMapping("/export")
    @ApiOperation("到处数据报表")
    public void export(HttpServletResponse response){  //传递response,以便使用输出流
        workSpaceService.exportData(response);
    }

2、ReportService

java 复制代码
 /**
     * 导出运营数据报表
     * @param response
     */
    @Override
    public void exportData(HttpServletResponse response){
        //查询数据库,获取数据--查询最近30天
        LocalDate dateBegin = LocalDate.now().minusDays(30);
        LocalDate dateEnd = LocalDate.now().minusDays(1);
        LocalDateTime begin = LocalDateTime.of(dateBegin, LocalTime.MIN);
        LocalDateTime end = LocalDateTime.of(dateEnd, LocalTime.MAX);
        BusinessDataVO businessDataVO = getbusinessDataMoreDay(begin,end);
        //通过poi写入excel
        //获得输入流
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/template.xlsx");
        try {
            XSSFWorkbook excel = new XSSFWorkbook(in);
            //填充数据
            XSSFSheet sheet = excel.getSheet("Sheet1");
            sheet.getRow(1).getCell(1).setCellValue("时间 "+ dateBegin+" 至 "+dateEnd);

            sheet.getRow(3).getCell(2).setCellValue(businessDataVO.getTurnover());
            sheet.getRow(3).getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());
            sheet.getRow(3).getCell(6).setCellValue(businessDataVO.getNewUsers());

            sheet.getRow(4).getCell(2).setCellValue(businessDataVO.getValidOrderCount());
            sheet.getRow(4).getCell(4).setCellValue(businessDataVO.getUnitPrice());

            //填充明细数据(30天,每天的明细)
            List<LocalDate> dateList = new ArrayList<>();//30天每天的日期,用于循环查询数据库
            dateList.add(dateBegin);
            while(!dateBegin.isEqual(dateEnd)){
                dateBegin = dateBegin.plusDays(1);
                dateList.add(dateBegin);
            }
            //运营数据集合,每一天运营数据都是一个集合项
            List<BusinessDataVO> businessDataList = new ArrayList<>();
            for (LocalDate date : dateList){
                LocalDateTime beginTime = LocalDateTime.of(date, LocalTime.MIN);
                LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);
                BusinessDataVO businessData = getbusinessDataMoreDay(beginTime, endTime);
                businessDataList.add(businessData);
            }
            //POI装入excel
            for(int i =7; i< (businessDataList.size()+7); i++){
                XSSFRow row = sheet.getRow(i);
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                String formattedDate = dateList.get(i-7).format(formatter);
                row.getCell(1).setCellValue(formattedDate);
                row.getCell(2).setCellValue(businessDataList.get(i-7).getTurnover());
                row.getCell(3).setCellValue(businessDataList.get(i-7).getValidOrderCount());
                row.getCell(4).setCellValue(businessDataList.get(i-7).getOrderCompletionRate());
                row.getCell(5).setCellValue(businessDataList.get(i-7).getUnitPrice());
                row.getCell(6).setCellValue(businessDataList.get(i-7).getNewUsers());
            }

            //通过输出流,把excel下载到浏览器
            ServletOutputStream out = response.getOutputStream();
            excel.write(out);

            //关闭资源
            out.close();
            excel.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
相关推荐
灵析表格1 小时前
WPS Excel官方函数扩展库数据安全加密校验函数深度研究报告:Excel国密SM3/SM4加解密、MD5摘要、UUID、Base64与URL编解码全栈解析
excel·wps
AC赳赳老秦7 小时前
网页公开附件自动采集:OpenClaw 批量下载页面内嵌 Word/Excel 附件,统一格式后结构化入库
java·python·word·php·excel·deepseek·openclaw
VBAMatrix1 天前
表格导航!实现Word合并附注与多个Excel的数据同步
word·excel·审计报告·审计·会计师事务所·报告工具
AI英德西牛仔1 天前
手机文心怎么导出文档?AI 导出鸭一键解决格式崩塌与批量归档难题
人工智能·智能手机·excel·deepseek·ai导出鸭
AI导出鸭1 天前
Grok苹果版导出表格的工程化解耦方案:AI导出鸭的技术逻辑与批量实践
人工智能·excel·ai导出鸭
reasonsummer2 天前
【办公类110-05】20260807园园通小班“待补充”户籍地址自动修改(Python+EXCEL)
开发语言·python·excel
qq83443102 天前
一款纯前端的excel控件,XuY_Sheet 电子表格组件教程
前端·excel·教程·luckysheet·xuy_sheet控件·前端表格控件
开开心心就好2 天前
免费压缩软件WinRAR无弹窗、广告干扰
java·开发语言·前端·数据库·python·excel·winrar
AI导出鸭3 天前
怎么让千问做表格?AI导出鸭苹果版将千问输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
xiaopai9454 天前
工程项目管理系统选型:WPS/Excel为何难以替代专业系统的数据关联逻辑
excel·wps·项目管理系统·建米软件