禁止事项
禁止使用用户模式构建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(