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();             }         }     }  }  

相关内容

热门资讯

现有说明如下!雀友会广东潮汕麻... 现有说明如下!雀友会广东潮汕麻雀辅助!竟然确实有开挂辅助app(有挂秘籍)-哔哩哔哩1、该软件可以轻...
绝活儿透视挂!牵手跑得软件(辅... 绝活儿透视挂!牵手跑得软件(辅助)总是是有辅助工具(哔哩哔哩)1、超多福利:超高返利,海量正版游戏,...
突发!超级三加一辅助工具!其实... 突发!超级三加一辅助工具!其实真的是有开挂辅助神器(讲解有挂)-哔哩哔哩1、超级三加一辅助工具免费辅...
技法透视挂!财神13游戏辅助器... 技法透视挂!财神13游戏辅助器脚本(辅助)好像是有辅助神器(哔哩哔哩)1、点击下载安装,脚本分类一目...
据监测!中至鹰潭帮助器!竟然存... 据监测!中至鹰潭帮助器!竟然存在有开挂辅助软件(有挂透视)-哔哩哔哩亲,关键说明,透视脚本安卓赛季回...
窍要透视挂!新蜜瓜大厅控制器(... 窍要透视挂!新蜜瓜大厅控制器(辅助)一直一直都是有辅助方法(哔哩哔哩)1、完成辅助器v3.3的残局,...
法子透视挂!微信微乐辅助透视(... 法子透视挂!微信微乐辅助透视(辅助)原来真的是有辅助技巧(哔哩哔哩)1、很好的工具软件,可以解锁游戏...
黑科技辅助挂!微乐自建房怎么提... 黑科技辅助挂!微乐自建房怎么提高胜率!真是是真的有开挂辅助神器(确实有挂)-哔哩哔哩1、很好的工具软...
绝活透视挂!约局吧怎么看有没有... 绝活透视挂!约局吧怎么看有没有挂(辅助)确实存在有辅助app(哔哩哔哩)1、约局吧怎么看有没有挂透视...
围绕透视问题!哥哥打大a游戏攻... 围绕透视问题!哥哥打大a游戏攻略!其实确实有开挂辅助器(有挂技术)-哔哩哔哩1、哥哥打大a游戏攻略辅...