hutool获取大数据量的excel内容及sheet名称问题
创始人
2024-11-14 16:06:03
0

读取大数据量的excel时

代码如下

private static RowHandler createRowHandler() {         return new RowHandler() {             @Override             public void handle(int i, long l, List list) {                 System.out.println(i + " " + l + " " + list);             }         };     }     public static void main(String[] args) {         File file = FileUtil.file("d:/1.xlsx");         ExcelUtil.readBySax(file,-1,createRowHandler());      } 

报错

NoSuchMethodError:org.apache.poi.util.XMLHelper.newXMLReader()

解决办法

修改源码

ExcelSaxUtil中readFrom方法中的xmlReader = XMLHelper.newXMLReader();

改为

xmlReade SAXHelper.newXMLReader();

或者升级poi到5.x

读取sheet名称问题

代码如下

 public static List getSheetNames() throws IOException {         OPCPackage open = null;         try {             File file = FileUtil.file("d:/1.xlsx");             open = OPCPackage.open(file, PackageAccess.READ);             XSSFReader xssfReader = new XSSFReader(open);             SheetRidReader parse = SheetRidReader.parse(xssfReader);             List sheetNames = parse.getSheetNames();              return sheetNames;         } catch (IOException e) {             throw new RuntimeException(e);         } catch (OpenXML4JException e) {             throw new RuntimeException(e);         } finally {             if (open!= null){                 open.close();             }         }     }

这是运行没问题的 

当将open = OPCPackage.open(file, PackageAccess.READ);改为文件流的形式如下

open = OPCPackage.open(new FileInputStream(file));

将报错

Zip bomb detected! The file would exceed the max. ratio of compressed file size to the size of the expanded data. This may indicate that the file is used to inflate memory usage and thus could pose a security risk. You can adjust this limit via ZipSecureFile.setMinInflateRatio() if you need to work with files which exceed this limit. Uncompressed size: 233647, Raw/compressed size: 2324, ratio: 0.009947 Limits: MIN_INFLATE_RATIO: 0.010000, Entry: xl/styles.xml

包括获取文件内容时将

ExcelUtil.readBySax(file,-1,createRowHandler());改为流的形式如下
ExcelUtil.readBySax(new FileInputStream(file),-1,createRowHandler()); 同样会报这个错

这是因为压缩率超过范围了 在执行之前添加代码

ZipSecureFile.setMinInflateRatio(-1.0);即可解决

改完后代码如下

package org.example;  import cn.hutool.core.io.FileUtil; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.sax.SheetRidReader; import cn.hutool.poi.excel.sax.handler.RowHandler; import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackageAccess; import org.apache.poi.openxml4j.util.ZipSecureFile; import org.apache.poi.util.XMLHelper; import org.apache.poi.xssf.eventusermodel.XSSFReader;  import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.List;  public class Test5 {      private static RowHandler createRowHandler() {         return new RowHandler() {             @Override             public void handle(int i, long l, List list) {                 System.out.println(i + " " + l + " " + list);             }         };     }     public static void main(String[] args) throws FileNotFoundException {         ZipSecureFile.setMinInflateRatio(-1.0);         File file = FileUtil.file("d:/1.xlsx");         ExcelUtil.readBySax(new FileInputStream(file),-1,createRowHandler());      }     public static List getSheetNames() throws IOException {         OPCPackage open = null;         try {             ZipSecureFile.setMinInflateRatio(-1.0);             File file = FileUtil.file("d:/1.xlsx");             open = OPCPackage.open(new FileInputStream(file));             XSSFReader xssfReader = new XSSFReader(open);             SheetRidReader parse = SheetRidReader.parse(xssfReader);             List sheetNames = parse.getSheetNames();             return sheetNames;         } catch (IOException e) {             throw new RuntimeException(e);         } catch (OpenXML4JException e) {             throw new RuntimeException(e);         } finally {             if (open!= null){                 open.close();             }         }     }  }  

相关内容

热门资讯

一分钟快速了解!有没有人wep... 一分钟快速了解!有没有人wepoker,对战互娱辅助系统,确实存在有辅助安装(有人有挂)1)对战互娱...
外挂诀窍!哈糖大菠萝挂法,德普... 外挂诀窍!哈糖大菠萝挂法,德普之星透视软件免费入口官网-切实一直都是有辅助教程(哔哩哔哩)1、哈糖大...
这一问题亟待解决!红龙poke... 这一问题亟待解决!红龙poker辅助平台(透视)其实是有辅助下载(有挂技巧)-哔哩哔哩;运红龙pok...
外挂方针!pokerworld... 外挂方针!pokerworld修改器,德扑圈透视-一贯真的有辅助攻略(哔哩哔哩)在进入pokerwo...
玩家必看秘籍!wejoker黑... 玩家必看秘籍!wejoker黑侠辅助器,免费闲逸手游辅助软件下载,其实存在有辅助下载(有挂攻略)1、...
透视攻略!wepoker新号好... 透视攻略!wepoker新号好一点吗(透视)一直有辅助插件(有挂工具)-哔哩哔哩暗藏猫腻,小编详细说...
外挂秘籍!pokerworld... 外挂秘籍!pokerworld软件,fishpoker透视-一贯一直都是有辅助软件(哔哩哔哩)1、点...
玩家必知教程!werplan外... 玩家必知教程!werplan外开挂,哈糖大菠萝助手,一直存在有辅助辅助(真的有挂)1、这是跨平台的哈...
透视有挂!wpk透视是真的假的... 透视有挂!wpk透视是真的假的(透视)切实是有辅助插件(讲解有挂)-哔哩哔哩1、超多福利:超高返利,...
外挂演示!扑克之星辅助,xpo... 外挂演示!扑克之星辅助,xpoker透视辅助-都是是有辅助软件(哔哩哔哩)1、很好的工具软件,可以解...