首页 > 其他分享 >POI导出Execl

POI导出Execl

时间:2023-06-19 14:55:28浏览次数:45  
标签:Execl dataRow1 导出 Excel createCell POI setCellValue XSSFWorkbook HSSFWorkbook

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. 暂时没了

标签:Execl,dataRow1,导出,Excel,createCell,POI,setCellValue,XSSFWorkbook,HSSFWorkbook
From: https://www.cnblogs.com/MLYR/p/17491152.html

相关文章

  • EXPDP导出带LOB字段表报ORA-01555错误解决
    问题概述expdp导出数据,结果遇到如下报错:ProcessingobjecttypeDATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMAORA-31693:Tabledataobject"USER1"."TKINFO"failedtoload/unloadandisbeingskippedduetoerror:ORA-29913:errorinexecutingODCIEX......
  • CF19D. Points
    感觉不难啊,为什么是*2800捏。先离散化。对每个横坐标开一个set存点,插入删除就能做了。查询的时候线段树二分就行了。更具体地,我们维护区间内纵坐标的最大值,在二分的时候能左就左,不能左就右。注意这里的右上角是严格大于。点击查看代码#include<bits/stdc++.h>#definei......
  • Java:使用poi操作docx的word文档
    packagecom.aomen.java;importorg.apache.poi.openxml4j.exceptions.InvalidFormatException;importorg.apache.poi.util.Units;importorg.apache.poi.xwpf.usermodel.*;importorg.apache.xmlbeans.XmlCursor;importorg.openxmlformats.schemas.wordprocessingml.......
  • Delphi 用TDatasetToJSONBridge原生支持DataSet导出Json
    Xalion发现data.DBJson单元,不知什么时候加的,官方帮助中也没有写。procedureTForm18.Button2Click(Sender:TObject);varcV:TDatasetToJSONBridge;jo:Tjsonobject;begincV:=TDatasetToJSONBridge.Create;trycV.Dataset:=mt;jo:=Tjsonobject(cV.Pro......
  • checkpoint
    前言PyTorch提供了一种非常方便的节省显存的方式,就是Checkpoint机制。这篇文章的目的在于更透彻的了解其内在机制。Checkpoint机制该技术的核心是一种使用时间换空间的策略。在现有的许多方法中被大量使用,例如DenseNet、SwinTransformer源码中都可以看到它的身影。为了......
  • ABC306 Poisonous Full-Course
    Atcoder题目链接题目大意Takahashi要品尝\(N\)个菜品.这些菜品中有些是有毒的,有些是解药.当他吃下第\(i\)个菜品时,他的总美味值会增加\(Y_{i}\),同时有以下效果:如果吃下的菜品是有毒的(\(X_{i}=1\)),且他现在的胃是健康的,他的胃转变为不舒服的;如果他现在的胃已......
  • [Go] 理解 Go 的 unintptr、unsafe.Pointer、*type
    理解Go的unintptr、unsafe.Pointer、*type概念*type:用于传递对象地址,无法进行指针运算unsafe.Pointer:通用指针,用于表示任意类型的指针,无法进行指针运算,无法读取存储的值,可作为对象引用任意类型的指针可以转换为unsafe.Pointerunsafe.Pointer可以转换为任......
  • 使用Epplus 导出Excel
    引入包,不赘述。 实例化ExcelPackageusing(varpackage=newExcelPackage())创建sheet对象sheet1,标题叫订单明细varsheet1=package.Workbook.Worksheets.Add("订单明细"); 第一行设置为标题for(intc=1;c<=cols.Leng......
  • NPOI导出Excel表格带图片
    if(info.ApplyImg.IsNotNullOrEmpty()){//添加图片HSSFWorkbookhwb=newHSSFWorkbook();HSSFSheetsheet=(HSSFSheet)hwb.CreateSheet("房产维修申请单");byte[]bytes=GetImageB......
  • 打工笔记--------------------------弄了一个还不错的NPOI的helper类
    `usingNPOI.HSSF.UserModel;usingNPOI.SS.UserModel;usingNPOI.SS.Util;usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.IO;usingSystem.Linq;usingSystem.Text;namespaceUtils.Public{publicpartialclassNPOIHelper{/......