十万级别Excel数据的导入导出

本文介绍了如何处理十万级别的Excel数据导入导出。对于导入,使用Excel Streaming Reader以节省内存,通过迭代方式读取数据。导出时,利用POI的SXSSFWorkbook,通过临时文件交换内存,适合大数据量场景。在测试中,70425行52列的数据,读取用时12259ms,写入用时5487ms。
  1. 导入:使用Excel Streaming Reader进行海量数据读取
    这个第三方工具会把一部分的行(可以设置)缓存到内存中,在迭代时不断加载行到内存中,而不是一次性的加载所有记录到内存,这样就可以不断的读取excel内容并且不影响内存的使用。
    但是这个工具也有一定的限制:只能用于读取excel的内容,写入操作不可用;可以使用getSheetAt()方法获取到对应的Sheet,因为当前只是加载了有限的row在内存中,因此不能随机访问row,即不能使用getRow(int rowNum)方法;由于行数据已经加载到了内存,因此可以随机的访问Cell数据,即可以使用getCell(int cellnum)方法。使用这个工具,建议使用迭代器来进行迭代。
    引入依赖
    <dependency>
        <groupId>com.monitorjbl</groupId>
        <artifactId>xlsx-streamer</artifactId>
        <version>2.1.0</version>
    </dependency>
import com.monitorjbl.xlsx.StreamingReader;
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
/**
 * @Author nealin
 * @Date 2019/6/19 14:42
 * @Version 1.0
 *  使用Excel Streaming Reader进行海量数据读取
 */
public class XstreamerDemo {
   
   
    private FileInputStream inputStream;
    private Workbook workbook;
    public List<List<String>> read(String filePath) throws FileNotFoundException {
   
   
        inputStream = new FileInputStream(new File(filePath));
        workbook = StreamingReader.builder()
                .rowCacheSize(100)
                .bufferSize(4098)
                .open(inputStream);
        Sheet sheet = workbook.getSheetAt(0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值