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

相关内容

热门资讯

透视脚本!wpk数据透视(wP... 透视脚本!wpk数据透视(wPk)最新ai辅助黑科技(智能ai辅助)(2022已更新)-哔哩哔哩;1...
透视ai!wpk辅助器安装(W... 透视ai!wpk辅助器安装(WPk)最新ai辅助黑科技(智能ai辅助)(2020已更新)-哔哩哔哩;...
透视ai!wpk辅助器是真的假... 透视ai!wpk辅助器是真的假的(wpK)最新ai辅助黑科技(智能ai辅助)(2023已更新)-哔哩...
透视插件!wpk俱乐部有假吗(... 您好,Wpk这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家在这款游...
透视软件!wpk德州胜利跟号有... 透视软件!wpk德州胜利跟号有关么(wpK)最新ai辅助黑科技(智能ai辅助)(2025已更新)-哔...
透视安卓版!wpk透视(WPK... 透视安卓版!wpk透视(WPK)最新ai辅助黑科技(智能ai辅助)(2021已更新)-哔哩哔哩;1、...
透视游戏!wpk微扑克免费辅助... 透视游戏!wpk微扑克免费辅助(WPk)最新ai辅助黑科技(智能ai辅助)(2025已更新)-哔哩哔...
透视好牌!wpk线上打法教学(... 透视好牌!wpk线上打法教学(wpK)最新ai辅助黑科技(智能ai辅助)(2023已更新)-哔哩哔哩...
透视中牌率!wpk辅助挂(wp... 透视中牌率!wpk辅助挂(wpK)最新ai辅助黑科技(智能ai辅助)(2024已更新)-哔哩哔哩1、...
透视教学!wpk线上实战(wp... 透视教学!wpk线上实战(wpK)最新ai辅助黑科技(智能ai辅助)(2023已更新)-哔哩哔哩1)...