Java读写excel文件

news/2024/7/21 6:59:18 标签: java, excel, 开发语言

最近在学习某马的外卖项目,需要使用Java读写excel文件。

  • 导入依赖
<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>
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();
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();
java">    /**
     * 导出excel表
     * @param httpServletResponse
     */
    @Override
    public void exportData(HttpServletResponse httpServletResponse) throws IOException {
        //打开文件
        InputStream in=  this.getClass().getClassLoader().getResourceAsStream("template/template.xlsx");
        //创键excel对象
        XSSFWorkbook excel=new XSSFWorkbook(in);
        XSSFSheet sheet=excel.getSheetAt(0);
        //创建日期
        LocalDate end=LocalDate.now().plusDays(-1);
        LocalDate begin=LocalDate.now().plusDays(-30);
        sheet.getRow(1).getCell(1).setCellValue(begin+"---"+end);
        //读取概览数据
        BusinessDataVO businessDataVO=this.getBusinessData(LocalDateTime.of(begin,LocalTime.MIN),LocalDateTime.of(end,LocalTime.MAX));
        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());
        //遍历每一天
        int cnt=7;
        while(!begin.equals(end)){
            BusinessDataVO businessData=this.getBusinessData(LocalDateTime.of(begin,LocalTime.MIN),LocalDateTime.of(begin,LocalTime.MAX));
            sheet.getRow(cnt).getCell(1).setCellValue(String.valueOf(begin));
            sheet.getRow(cnt).getCell(2).setCellValue(businessData.getTurnover());
            sheet.getRow(cnt).getCell(3).setCellValue(businessData.getValidOrderCount());
            sheet.getRow(cnt).getCell(4).setCellValue(businessData.getOrderCompletionRate());
            sheet.getRow(cnt).getCell(5).setCellValue(businessData.getUnitPrice());
            sheet.getRow(cnt).getCell(6).setCellValue(businessData.getNewUsers());
            begin=begin.plusDays(1);
            cnt++;
        }
        //最后一天
        BusinessDataVO businessData=this.getBusinessData(LocalDateTime.of(begin,LocalTime.MIN),LocalDateTime.of(begin,LocalTime.MAX));
        sheet.getRow(cnt).getCell(1).setCellValue(String.valueOf(begin));
        sheet.getRow(cnt).getCell(2).setCellValue(businessData.getTurnover());
        sheet.getRow(cnt).getCell(3).setCellValue(businessData.getValidOrderCount());
        sheet.getRow(cnt).getCell(4).setCellValue(businessData.getOrderCompletionRate());
        sheet.getRow(cnt).getCell(5).setCellValue(businessData.getUnitPrice());
        sheet.getRow(cnt).getCell(6).setCellValue(businessData.getNewUsers());
        begin=begin.plusDays(1);
        cnt++;

        //设置content-type
        httpServletResponse.setContentType("application/octet-stream");
        //设置文件头
        httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("example.xlsx", "UTF-8"));
        //获取输出流
        ServletOutputStream out=httpServletResponse.getOutputStream();
        excel.write(out);
        //关闭流
        in.close();
        out.close();
        excel.close();
    }

http://www.niftyadmin.cn/n/5193579.html

相关文章

CMSIS-RTOS在stm32使用

目录&#xff1a; 一、安装和配置CMSIS_RTOS.1.打开KEIL工程&#xff0c;点击MANAGE RUN-TIME Environment图标。2.勾选CMSIS CORE和RTX.3.配置RTOS 时钟频率、任务栈大小和数量&#xff0c; 软件定时器. 二、CMSIS_RTOS内核启动和创建线程。1.包含头文件。2.内核初始化和启动。…

【done】剑指offer68:二叉树最近公共祖先

LCA&#xff08;lowest common ancestor&#xff09;问题 力扣&#xff0c;【二叉搜索树】https://leetcode.cn/problems/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu-xian-lcof/description/ 【普通二叉树】https://leetcode.cn/problems/er-cha-shu-de-zui-jin-gong-gong-zu…

【每日一题】—— C. Yarik and Array(Codeforces Round 909 (Div. 3))(贪心)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

【C++】plog

GitHub地址&#xff1a;Plog - portable, simple and extensible C logging library 介绍 Plog is一个C日志库&#xff0c;旨在保持尽可能的简单、小巧和灵活。它被创建作为现有大型库的替代品&#xff0c;并提供了一些独特的功能&#xff0c;如CSV日志格式和宽字符串支持。 …

【springboot笔记】程序可用性检测ApplicationAvailability

1.背景 springboot-3.1.5 ApplicationAvailability LivenessState ReadinessState AvailabilityChangeEvent 我们可以通过ApplicationAvailability获取当前应用程序的可用性&#xff0c;这个可用性包括ApplicationContext和对外请求路由两种。 LivenessState 是表示Applicatio…

CDGA考试-2022年最新模拟题一套100道题(含答案)

CDGA考试-2022年最新模拟题一套100道题(含答案),最新考试题每道题四个答案。 1.根据DMBOK2,在实施数据治理时,要注重数据标准的建设;以下关于数据标准的描述,错误的选项是哪个? A.数据标准必须得到有效沟通、监控,并被定期审查和更新; 最重要的是,必须有强制手段,对数…

信安.网络安全.UDP协议拥塞

第一部分 如何解决UDP丢包问题 一、UDP 报文格式 每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长&#xff08;2 字节&#xff09;字段组成&#xff0c;分别说明该报文的源端口、目的端口、报文长度和校验值。UDP 报文格式如图所示。 UDP 报文中每个…

如何快速本地搭建悟空CRM结合内网穿透工具高效远程办公

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 无需公网IP&#xff0c;使用cpolar实现悟空CRM远程访问二. 通过公网来访问公司…