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有挂(透视)wep... wepoke有挂(透视)wepoke有机器人吗(详细辅助黑科技教程)真是有挂(攻略有挂)1、下载好w...
微扑克辅助器ios(微扑克)微... 微扑克辅助器ios(微扑克)微扑克辅助安卓版本(透视)真是存在有挂(详细辅助软件教程)1)微扑克辅助...
wepoke真的有挂(透视)w... wepoke真的有挂(透视)wepoke怎么来好牌(详细辅助AI教程)总是是有挂(大神透视挂);1、...
微扑克ai机器人(微扑克)微扑... 微扑克ai机器人(微扑克)微扑克靠谱吗(透视)竟然真的是有挂(详细辅助规律教程)1、任何微扑克ai机...
wpk透视辅助测试!wpk辅助... wpk透视辅助测试!wpk辅助软件查得出来吗(透视)外挂透视挂辅助器(一向真的是有挂)是一款可以让一...
wepoke有没有挂(透视)w... wepoke有没有挂(透视)wepoke app系统规律(详细辅助攻略教程)总是是真的有挂(攻略有挂...
微扑克德州专用辅助器(微扑克)... 微扑克德州专用辅助器(微扑克)微扑克发牌规律性总结(透视)好像是真的有挂(详细辅助透明挂教程)1、进...
wpk有透视辅助!wpk辅助器... wpk有透视辅助!wpk辅助器是真的假的(透视)外挂透视辅助软件(从来存在有挂)是一款可以让一直输的...
wepok软件透明挂(透视)w... wepok软件透明挂(透视)wepoke有没有挂(详细辅助透明挂教程)切实是有挂(大神辅助机器人);...
微扑克辅助机器人(微扑克)微扑... 微扑克辅助机器人(微扑克)微扑克伙牌技巧(透视)原来真的是有挂(详细辅助2025新版教程)1、微扑克...