大型Excel导入解决方案

禁止事项

禁止使用用户模式构建workbook的方式处理excel

注意:

如果EXCEL过大,请在MyHandler中采用分批分列的方式的读取Excel内容,处理完一批后再读取

事件模式处理代码

1、根据filePath构建XSSFReader对象

OPCPackage pkg = OPCPackage.open(filePath);  // filePath->excel文件绝对路径
XSSFReader r = new XSSFReader(pkg);

2、获取工作簿输入流

InputStream is = r.getSheet("rId1");  // 这里获取的是sheet1的工作簿

3、获取工作簿共享字符串表

SharedStringsTable sst = r.getSharedStringsTable();  // 这里获取到的是全部sheet的共享字符串表

4、创建XMLReader对象

XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");

5、设置自定义内容处理器

parser.setContentHandler(new MyHandler(sst, list));

6、转换工作簿输入流并解析

byte[] isBytes = IOUtils.toByteArray(is);
InputSource inputSource = new InputSource(new ByteArrayInputStream(isBytes));
parser.parse(inputSource);

End、关闭流

is.close();
pkg.close();

SAX解析EXCEL步骤

解析Excel代码

OPCPackage pkg = OPCPackage.open(filePath);  // filePath->excel文件绝对路径
XSSFReader r = new XSSFReader(pkg);
InputStream is = r.getSheet("rId1");  // r1d1表示第一个sheet工作簿,对应关系可以在解压缩xml中查看
byte[] isBytes = IOUtils.toByteArray(is);  // 如果发生内存溢出改为分块读取
// 打开共享字符串表,对其进行解析,然后返回用于处理共享字符串的便捷对象
SharedStringsTable sst = r.getSharedStringsTable();  
// 创建XMLReader对象
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
// MyHandler extends DefaultHandler
List<List<String>> list = new ArrayList<>();
parser.setContentHandler(
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值