Java使用xerces和easyPoi大批量导入导出Excel

需求描述:

首先说一下我遇到的需求场景,需要将一个条数大概60多万条的Excel表格其中的用户手机号码一列,根据特定的规则生成userId之后,在写入到一个新的Excel表格中,这个新的Excel表格除了要有新增的userId的信息之外,还需要包含之前旧的Excel表格的所有信息,要用代码实现大概是这么一个逻辑,要先将这旧的Excel表格通过工具解析,将表格数据读入内存,获取每条的手机号转化为userId之后,再将一条一条的数据转化为一个个的对象,将一条信息对应的完整的数据都封装进对象的属性,再使用工具写出一个新的Excel.

大批量读取导入数据:

读取数据我们使用apache的xerces工具,首先在pom文件中引入对应依赖:

<dependency>
	<groupId>org.eclipse.birt.runtime.3_7_1</groupId>
	<artifactId>org.apache.xerces</artifactId>
	<version>2.9.0</version>
</dependency>

然后进行导入工具类的编写,直接使用的话,下面的代码直接复制即可:

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 1. XSSF and SAX (Event API)
 */
public abstract class BigDataParseExcel extends DefaultHandler {
   
    private SharedStringsTable sst;
    private String lastContents;
    private boolean nextIsString;
    private int sheetIndex = -1;
    private List<String> rowlist = new ArrayList<String>();
    private int curRow = 0; //当前行
    private int curCol = 0; //当前列索引
    private int preCol = 0; //上一列列索引
    private int titleRow = 0; //标题行,一般情况下为0
    private int rowsize = 0; //列数

    //excel记录行操作方法,以sheet索引,行索引和行元素列表为参数,对sheet的一行元素进行操作,元素为String类型
    public abstract void optRows(int sheetIndex, int curRow, List<String> rowlist) throws SQLException;
//只遍历一个sheet,其中sheetId为要遍历的sheet索引,从1开始,1-3

    /**
     * @param filename
     * @param sheetId  sheetId为要遍历的sheet索引,从1开始,1-3
     * @throws Exception
     */
    public void processOneSheet(String filename, int sheetId) throws Exception {
   
        OPCPackage pkg = OPCPackage.open(filename);
        XSSFReader r = new XSSFReader(pkg);
        SharedStringsTable sst = r.getSharedStringsTable();
        XMLReader parser = fetchSheetParser(sst);
		// rId2 found by processing the Workbook
		// 根据 rId# 或 rSheet# 查找sheet
        InputStream sheet2 = r.getSheet("rId" + sheetId);
        sheetIndex++;
        InputSource sheetSource = new InputSource(sheet2);
        parser.parse(sheetSource);
        sheet2.close();
    }

    /**
     * 遍历 excel 文件
     */
    public void process(String filename) throws Exception {
   
        OPCPackage pkg = OPCPackage.open(filename);
        XSSFReader r 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值