阅读文本大概需要3分钟。
来源:https://www.cnblogs.com/barrywxx/p/10700283.html
使用POI或JXLS导出大数据量(百万级)Excel报表常常面临两个问题:
1. 服务器内存溢出;
2. 一次从数据库查询出这么大数据,查询缓慢。
当然也可以分页查询出数据,分别生成多个Excel打包下载,但这种生成还是很缓慢。
大数据量导入请参考:Java实现大批量数据导入导出(100W以上) -(一)导入
那么如何解决呢?
我们可以借助XML格式利用模板替换,分页查询出数据从磁盘写入XML,最终会以Excel多sheet形式生成。亲测2400万行数据,生成Excel文件4.5G,总耗时1.5分钟。
https://www.cnblogs.com/barrywxx/p/10700283.html
我利用StringTemplate模板解析技术对XML模板进行填充。当然也可以使用FreeMarker, Velocity等Java模板技术实现。
首先引入StringTemplate所需Jar包:
使用技术为 stringTemplate
pom.xml:
antlr
antlr
2.7.7
org.antlr
stringtemplate
3.2.1
首先准备导出Excel模板,然后打开-》另存为-》选择格式为XML,然后用文本打开XML,提取XML头模板(head.st可通用),数据体模板(boday.st):
head.st可通用:
xml version="1.0"?>
mso-application progid="Excel.Sheet"?>
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
xmlns="urn:schemas-microsoft-com:office:office">
1996-12-17T01:32:42Z
2013-08-02T09:21:24Z
11.9999
xmlns="urn:schemas-microsoft-com:office:office">
xmlns="urn:schemas-microsoft-com:office:excel">
4530
8505
480
120
False
False
ss:ID="Default" ss:Name="Normal">