Java·Excel导出百万级数据

POI依赖介绍

excel对行列的限制
| excel2003 | 65536 | 256|
| excel2007 | 1048576 | 16384 |

1. Excel2003格式(java对象使用HSSFWorkbook
Excel2003支持每个工作表中最多有 65536 行256列。对于工作表能够支持的最大个数,受CPU反应速度和内存大小影响。
采用常用导出方式导出数据时,需要注意的是Excel 2003行数和列数的限制。常用导出方式中的POI支持该格式的只有HSSF包
,当导出数据量大于一页的最大行数(65536)时,可采取分页的形式进行存储。

2. Excel2007格式(java对象使用SXSSFWorkbook)
Excel 2007是Excel 2003的升级版,Excel 2007支持每个工作表中最多有 1,048,576 行16,384 列。采用常用导出方式导出数据时,需要注意的是Excel 2007行数和列数的限制,常用导出方式支持该格式的只有XSSF包,包含SXSSF扩展包,并且仅有SXSSF支持大数据。

CSV格式介绍

CSV没有最大行数的限制,使用excel打开时会限制显示一百万行多点
CSV是一种通用的、相对简单的文件格式,广泛的应用在程序之间转移表格数据。
它通常具有以下特征:
1)纯文本,可以使用Excel和文本编辑器打开;
2)每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可 以包括可选的空格);
3)常用导出方式不会引起内存溢出问题。
常用导出方式推荐:1

JXL依赖介绍

1. JXL介绍
JXL是一个开源的Java Excel API项目。它能作为Java Excel API的一个共同的支持库,是因为它的基本功能是可创建,读取和写入电子表格。基本特征如下:
1)生成Excel文件
2)从工作簿和电子表格导入数据
3)获得行和列的总数
此方式对中文支持很好,不会出现乱码情况,支持单元格的常用操作,满足一般需求,该方式在写入效率上优于POI方式。
需要注意:JXL只支持xls档案格式,并且处理的数据量非常有限。

使用依赖

<dependencies>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.29</version>
  </dependency>
  <!---myBatis整合springboot框架起步依赖-->
  <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.2.2</version>
  </dependency>
  <!-- 使用poi 导出excel -->
  <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.17</version>
  </dependency>
  <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.17</version>
  </dependency>
  <dependency>
      <groupId>org.xmlunit</groupId>
      <artifactId>xmlunit-core</artifactId>
  </dependency>
  <!-- 使用jxl excel导出-->
  <dependency>
      <groupId>net.sourceforge.jexcelapi</groupId>
      <artifactId>jxl</artifactId>
      <version>2.6.12</version>
  </dependency>    
</dependencies>

上下文配置

#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mm?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

# 开启驼峰命名,不然数据库序列化时查询的数据会为null值
mybatis.configuration.map-underscore-to-camel-case=true


Excel2003格式导出

定义接口类

@Mapper
public interface QyjsdetaMapper {
   
    @Select("select id, account_id ,external_id from table_name")
    public List<QyjsdetaMode> qyjs();
}
# 或 (使用传参的形式)
@Mapper
public interface QyjsdetaMapper {
   
    @Select("select id, account_id, external_id from table_name limit #{id}")
    public List<QyjsdetaMode> qyjs(int id);
}



实体类对象:用来序列化接受数据库中的数据

public  class QyjsdetaMode{
   
        public String id ;
        public String accountId ;
        public String externalId ;
        省略了get、set方法
        }

测试数据库表是否可以正常打印

@RestController
public class tableController {
   

    @Autowired
    public QyjsdetaMapper table;
    @RequestMapping(value = "/mm", method = RequestMethod.GET)
    public List<QyjsdetaMode> Qust2(int id ) {
   
        List<QyjsdetaMode>  dd = table.qyjs(id);
        System.out.println("=====打印===");
        System.out.println("=======================helloworld=========================="+"\n" );
        return   dd ;
    }
}

**测试打印数据库数据100行**
http://localhost:8080/mm?id=100



导出Excel实现

@Controller
@RequestMapping("/")
public class QyjsExceldown {
   

    @Resource
    public QyjsdetaMapper qyjsdetaMpper;

    @RequestMapping(value = "/dd", method = RequestMethod.GET)
    public void downloadAllClassmate(HttpServletResponse response) throws IOException {
   
        HSSFWorkbook workbook = new HSSFWorkbook();//创建HSSFWorkbook对象,  excel的文档对象
        HSSFSheet sheet = workbook.createSheet("信息表"); //excel的表单
        HSSFSheet sheet2 = workbook.createSheet("信息表2"); //excel的表单
        List<QyjsdetaMode> classmateList = qyjsdetaMpper.qyjs();

        System.out.println
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青鸟遇鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值