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

相关内容

热门资讯

科技揭秘!wepoke辅助插件... 科技揭秘!wepoke辅助插件,太坑了果然存在有挂(2023已更新)(哔哩哔哩);大家肯定在之前we...
第七分钟辅助!多乐辅助app,... 第七分钟辅助!多乐辅助app,新永和链接辅助(正版透视开挂辅助方法)1、进入游戏-大厅左侧-新手福利...
玩家攻略“wepoker透视挂... 玩家攻略“wepoker透视挂”(透视)详细开挂辅助技巧wepoker透视模式为玩家提供了一个强大的...
第九分钟了解!如何在哈灵上作弊... 第九分钟了解!如何在哈灵上作弊插件开挂,jj斗地主麻将外g挂软件透视挂(最新版本2026)1、jj斗...
黑科技辅助(德州之星app)外... 黑科技辅助(德州之星app)外挂软件透明挂智能ai辅助app(透视)2025新版技巧(2026已更新...
玩家必看教程!红龙扑克真假,太... 玩家必看教程!红龙扑克真假,太坑了起初存在有挂(2026已更新)(哔哩哔哩);一、红龙扑克真假AI软...
9分钟辅助!wepoker辅助... 9分钟辅助!wepoker辅助器免费下载,拼三张辅助器(正版透视开挂辅助技巧)一、wepoker辅助...
五分钟了解!四川游戏家园通用辅... 五分钟了解!四川游戏家园通用辅助插件开挂,奇迹陕西辅助器软件透视挂(最新版本2026)1、四川游戏家...
科普分享“德扑之星辅助挂透视教... 科普分享“德扑之星辅助挂透视教程”(透视)详细开挂辅助教程无论是选择免费的还是收费的软件,都应该从自...
黑科技辅助(wepoker)外... 黑科技辅助(wepoker)外挂软件透明挂智能ai代打辅助脚本(透视)揭秘教程(2022已更新)(哔...