POI导出Execl

1.导包

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

2.代码

 @RequestMapping("/test1")
    @ResponseBody
    public ResponseEntity<InputStreamResource> test1(HttpServletResponse response) throws IOException {
        // 创建一个工作簿
        Workbook workbook = new XSSFWorkbook();

        // 创建一个工作表
        Sheet sheet = workbook.createSheet("Sheet1");
        Sheet sheet1 = workbook.createSheet("雁东");
        Sheet sheet2 = workbook.createSheet("城北");

        // 创建行和单元格,并填充数据
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("companyName");
        headerRow.createCell(1).setCellValue("zcount");

        Row dataRow1 = sheet.createRow(1);
        dataRow1.createCell(0).setCellValue("雁东");

        // 创建超链接
        CreationHelper creationHelper = workbook.getCreationHelper();
        Hyperlink hyperlink = creationHelper.createHyperlink(HyperlinkType.DOCUMENT);
        hyperlink.setAddress("'雁东'!A1");

        // 在单元格上设置超链接和值,注意要使用一个Cell对象来设置值和超链接
        Cell cell1 = dataRow1.createCell(1);
        cell1.setCellValue(1);
        cell1.setHyperlink(hyperlink);


        Row dataRow2 = sheet.createRow(2);
        dataRow2.createCell(0).setCellValue("城北");
        dataRow2.createCell(1).setCellValue(2);

        // 将工作簿转换为字节数组
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        workbook.write(outputStream);
        byte[] excelBytes = outputStream.toByteArray();

        // 设置响应头信息
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", "data.xlsx");

        // 创建一个输入流资源包装字节数组
        InputStreamResource inputStreamResource = new InputStreamResource(new ByteArrayInputStream(excelBytes));

        // 返回响应实体对象
        return ResponseEntity.ok()
                .headers(headers)
                .body(inputStreamResource);
    }

3.注意

  1. 导出xls使用HSSFWorkbook对象,导出xlsx使用XSSFWorkbook对象

    1. 	HSSFWorkbook: HSSFWorkbook是POI库中用于处理xls格式的Excel文件(Excel 97-2003)的类。它使用HSSF(Horrible Spreadsheet Format)来处理二进制格式的Excel文件。HSSFWorkbook在内存中表示Excel文档的数据结构,可以读取、写入和修改xls文件。
      
      	XSSFWorkbook: XSSFWorkbook是POI库中用于处理xlsx格式的Excel文件(Excel 2007及以上版本)的类。它使用XSSF(XML Spreadsheet Format)来处理基于XML的Excel文件。XSSFWorkbook同样在内存中表示Excel文档的数据结构,可以读取、写入和修改xlsx文件。
      
      区别:
      	文件格式:HSSFWorkbook处理xls格式文件,XSSFWorkbook处理xlsx格式文件。
      	底层实现:HSSFWorkbook使用HSSF方式,操作二进制格式文件;XSSFWorkbook使用XSSF方式,操作基于XML的文件。
      	兼容性:HSSFWorkbook兼容Excel 97-2003版本的文件;XSSFWorkbook兼容Excel 2007及以上版本的文件。
      	功能支持:由于xlsx格式的文件支持更多功能和特性,XSSFWorkbook相对于HSSFWorkbook提供了更多的功能和灵活性。
      
  2. 注意这段代码

    1.  Cell cell1 = dataRow1.createCell(1);
              cell1.setCellValue(1);
              cell1.setHyperlink(hyperlink);
      //之前老写成下面这样,图省事。但是这个实际上创建了两次Cell对象,后面的会覆盖前面的
      dataRow1.createCell(1).setCellValue(1);
      dataRow1.createCell(1).setHyperlink(hyperlink);
      
  3. 暂时没了

posted @   陌路邑人  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示