《苍穹外卖》知识梳理P11-Apache POI导出报表

这篇具有很好参考价值的文章主要介绍了《苍穹外卖》知识梳理P11-Apache POI导出报表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.Apache POI

可以通过Apache POI处理excel文件,核心操作是读和写

应用场景

  • 银行网银交易明细
  • 各种业务系统导出Excel报表
  • 批量导入业务数据

使用步骤

1.导入maven坐标

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

2.测试代码(写操作)

	public class PoiTest {
	
	    /**
	     * 写操作
	     * 通过POI创建excel文件并写入文件内容
	     */
	    public static void write() throws IOException {
	        //在内存中创建一个excel文件XSSFWorkbook表示excel文件
	        XSSFWorkbook excel = new XSSFWorkbook();
	        //在excel文件中创建一个sheet页
	        XSSFSheet sheet = excel.createSheet("info");
	        //在sheet页中创建行对象,i表示第i+1行
	        XSSFRow row = sheet.createRow(1);
	        //在行上创建单元格,并写入内容
	        row.createCell(1).setCellValue("姓名");
	        row.createCell(2).setCellValue("城市");
	
	        row = sheet.createRow(2);
	        row.createCell(1).setCellValue("张三");
	        row.createCell(2).setCellValue("北京");
	
	        row = sheet.createRow(3);
	        row.createCell(1).setCellValue("李四");
	        row.createCell(2).setCellValue("东京");
	
	        //通过输出流将内存中的内容输出到文件中
	        FileOutputStream fileOutputStream=new FileOutputStream(new File("D:\\info.xlsx"));
	        excel.write(fileOutputStream);
	        fileOutputStream.close();
	        excel.close();
	    }
	
	    public static void main(String[] args) throws Exception {
	        write();
	    }
	}

3.运行结果(写操作)
《苍穹外卖》知识梳理P11-Apache POI导出报表,《苍穹外卖》实操总结系列,java,spring,maven,spring boot,mybatis,apache
4.测试代码(读操作)

	public class PoiTest {

	    /**
	     * 通过POI读取excel文件中内容
	     */
	    public static void read() throws IOException {
	        //通过输入流读取一个磁盘中的文件内容;
	        FileInputStream inputStream = new FileInputStream(new File("D:\\info.xlsx"));
	        //在内存中创建一个excel文件XSSFWorkbook表示excel文件,并传入输入流
	        XSSFWorkbook excel=new XSSFWorkbook(inputStream);
	        //按照sheet页的名称读取
	        XSSFSheet sheet=excel.getSheetAt(0);
	        int lastRowNum = sheet.getLastRowNum();//获取有文字的最后一行的行号(从0开始);
	        for (int i = 1; i < lastRowNum; i++) {
	            //获取某一行
	            XSSFRow row=sheet.getRow(i);
	            if (row==null) continue;
	            //获取单元格对象
	            String cellValue=row.getCell(1).getStringCellValue();
	            String cellValue1=row.getCell(2).getStringCellValue();
	            System.out.println(cellValue+" "+cellValue1);
	        }
	        //关闭输入流
	        inputStream.close();
	        //关闭资源
	        excel.close();
	    }
	
	    public static void main(String[] args) throws Exception {
	//        write();
	        read();
	    }
	}

5.运行结果(读操作)
《苍穹外卖》知识梳理P11-Apache POI导出报表,《苍穹外卖》实操总结系列,java,spring,maven,spring boot,mybatis,apache

二.导出Excel报表

由于实际业务中可能会有复杂的报表格式,如果直接使用POI进行读取操作十分繁琐,通常是先在windows上对报表格式进行设计,得到一个模版文件,直接读入模版文件进行操作即可

  • 设计模版文件
  • 查询xx天的数据
  • 将查询到的数据写入模版文件
  • 通过输出流将excel文件下载到客户端浏览器

实现步骤

  • 项目中导入模版文件,在src/main/resources/下新建template目录用来存放模版文件,将模版.xlsx导入
    《苍穹外卖》知识梳理P11-Apache POI导出报表,《苍穹外卖》实操总结系列,java,spring,maven,spring boot,mybatis,apache
  • 编写代码,对指定位置进行填充,写入excel文件中的格式基本是固定的,我认为关键在于传递的参HttpServletResponse response,response.getOutputStream(): 通过调用response对象的getOutputStream()方法,获取到一个Servlet输出流。Servlet输出流是用于向客户端发送数据的输出流,通过这个输出流可以将数据发送到客户端。excel.write(outputStream): 调用excel对象的write()方法,将Excel文件内容写入到之前获取的Servlet输出流中。这会将Excel文件的内容写入到HTTP响应的输出流中,实际上是将Excel文件的字节流发送到客户端浏览器。然后客户端浏览器获得响应后自动开始下载文件.
	//通过输出流将excel下载到客户浏览器
    ServletOutputStream outputStream = response.getOutputStream();
    excel.write(outputStream);

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

业务层完整代码

	/**
     * 导出运行数据报表
     *
     * @param response
     */
    @Override
    public void exportBusinessData(HttpServletResponse response) {
        //查数据库获取营业数据
        LocalDate dateBegin = LocalDate.now().minusDays(30);
        LocalDate dateEnd = LocalDate.now().minusDays(1);
        //将日期转换为详细时间
        LocalDateTime dateStartPoint = LocalDateTime.of(dateBegin, LocalTime.MIN);
        LocalDateTime dateEndPoint = LocalDateTime.of(dateEnd, LocalTime.MAX);
        BusinessDataVO businessData = workspaceService.getBusinessData(dateStartPoint, dateEndPoint);
        ClassLoader loader = getClass().getClassLoader();
        InputStream stream = loader.getResourceAsStream("template/运营数据报表模板.xlsx");
        log.info("读入的输入流stream{}",stream);
        //从类路径下边读取资源
        InputStream inputStream = ReportServiceImpl.class.getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
//        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");

        try {
            //基于模版文件创建一个新的excel文件
            XSSFWorkbook excel=new XSSFWorkbook(inputStream);
            XSSFSheet sheet1 = excel.getSheet("Sheet1");
            //填充数据,填充时间
            sheet1.getRow(1).getCell(1).setCellValue("时间"+dateBegin+"至"+dateEnd);

            //获得第四行
            XSSFRow row=sheet1.getRow(3);
            row.getCell(2).setCellValue(businessData.getTurnover());
            row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
            row.getCell(6).setCellValue(businessData.getNewUsers());

            //获得第五行
            row=sheet1.getRow(4);
            row.getCell(2).setCellValue(businessData.getValidOrderCount());
            row.getCell(4).setCellValue(businessData.getUnitPrice());

            //填充明细数据
            for (int i=0;i<30;i++){
                LocalDate date=dateBegin.plusDays(1);
                //查询某一天的数据
                workspaceService.getBusinessData(LocalDateTime.of(dateBegin,LocalTime.MIN),
                        LocalDateTime.of(dateBegin,LocalTime.MAX));
                //获取某一行
                row = sheet1.getRow(7 + i);
                row.getCell(1).setCellValue(date.toString());
                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(5).setCellValue(businessData.getNewUsers());

            }

            //通过输出流将excel下载到客户浏览器
            ServletOutputStream outputStream = response.getOutputStream();
            excel.write(outputStream);

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

        } catch (IOException e) {
            e.printStackTrace();
        }
        //将查询到的数据写入到Excel文件中

    }

实现效果
备注:并不是下载了5个(是我之前测试用的提前下载了4个)
《苍穹外卖》知识梳理P11-Apache POI导出报表,《苍穹外卖》实操总结系列,java,spring,maven,spring boot,mybatis,apache文章来源地址https://www.toymoban.com/news/detail-825842.html

到了这里,关于《苍穹外卖》知识梳理P11-Apache POI导出报表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《苍穹外卖》知识梳理6-缓存商品,购物车功能

    一.缓存菜品   可以使用redis进行缓存;另外,在实现缓存套餐时可以使用spring cache提高开发效率;   通过缓存数据,降低访问数据库的次数; 使用的缓存逻辑: 1.每个分类下保存一份缓存数据;就是一对key-value(dish_1表示属于分类1的菜品列表) 2.数据库中的菜品有变更

    2024年02月19日
    浏览(35)
  • Apache POI 导出Excel报表

    大家好我是苏麟 , 今天聊聊Apache POI . 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI 都是用于操作 Excel 文件。 官网 : Apache POI - the Java API for Microsoft Do

    2024年01月17日
    浏览(44)
  • SpringBoot+SSM项目实战 苍穹外卖(11) Apache ECharts

    继续上一节的内容,本节学习Apache ECharts,实现营业额统计、用户统计、订单统计和销量排名Top10功能。 数据统计效果图: Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 常见效果:柱形图、饼形图、折线图

    2024年01月17日
    浏览(41)
  • Java项目-苍穹外卖-Day11-Apache ECharts数据统计

    主要是以下四项的统计,以不同形式的图形进行展示 自己去网站上看一哈,我不太懂前端 com.sky.controller.admin.ReportController com.sky.service.impl.ReportServiceImpl.java orderMapper orderMapper.xml Reportcontroller ReportServiceImpl orderMapper.xml reportController ReportServiceImpl orderMapper.xml

    2024年02月09日
    浏览(45)
  • 苍穹外卖 Spring Task 来单提醒 催单Apache ECharts day10~11

    Spring Task 订单状态定时处理 WebSocket 来单提醒 客户催单 功能实现: 订单状态定时处理 、 来单提醒 和 客户催单 订单状态定时处理: 来单提醒: 客户催单: 1.1 介绍 Spring Task 是Spring框架提供的 任务调度工具 ,可以按照约定的时间自动执行某个代码逻辑。 定位: 定时任务框

    2024年02月14日
    浏览(43)
  • 苍穹外卖亮点再梳理 ||

    一、项目整体亮点: 【注:基于每个亮点,均有整理的相关知识,可在博客中查看】 1.数据库的设计采用RBAC(基于角色访问控制)的权限设计。 RBAC将权限授予角色,然后将用户分配给角色,从而简化了权限管理。这种方法使得权限管理更加模块化和可管理,有利于系统的安

    2024年04月14日
    浏览(35)
  • 苍穹外卖day11笔记

    今日首先介绍前端技术Apache ECharts,说明后端需要准备的数据,然后讲解具体统计功能的实现,包括营业额统计、用户统计、订单统计、销量排名。 ECharts是一款基于 Javascript 的数据可视化图表库。我们用它来展示图表数据。 步骤 1). 引入echarts.js 文件 2). 为 ECharts 准备一个设

    2024年02月13日
    浏览(44)
  • 项目实战————苍穹外卖(DAY11)

    Apache ECharts 营业额统计 用户统计 订单统计 销量排名Top10 功能实现: 数据统计 数据统计效果图: 1.1 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 官网地址:Apache ECharts 常见效果展示: 1). 柱形图

    2024年01月20日
    浏览(48)
  • Apache POI,springboot中导出excel报表

    2.1 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI 都是用于操作 Excel 文件。 Apache POI 的应用场景: 银行网银系统导出交易明细 各种业务系统导出Excel报

    2024年02月02日
    浏览(35)
  • 【学习笔记】java项目—苍穹外卖day11

    Apache ECharts 营业额统计 用户统计 订单统计 销量排名Top10 功能实现: 数据统计 数据统计效果图: 1.1 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 官网地址:https://echarts.apache.org/zh/index.html 常见效果

    2024年04月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包