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

相关内容

热门资讯

一分钟教会你!拱趴大菠萝挂怎么... 一分钟教会你!拱趴大菠萝挂怎么安装,微乐辅助工具哪个好用(透视)一贯有有攻略(哔哩哔哩)1、用户打开...
玩家亲测!聚星ai辅助工具下载... 玩家亲测!聚星ai辅助工具下载,微乐自建房脚本免费下载苹果版(透视)一直有有教程(哔哩哔哩)所有人都...
揭秘几款!poker红龙辅助,... 揭秘几款!poker红龙辅助,微乐自建房免费黑科技推荐(透视)一贯真的有攻略(哔哩哔哩)微乐自建房免...
玩家亲测!拱趴大菠萝怎么开挂,... 玩家亲测!拱趴大菠萝怎么开挂,微信微乐辅助免费(透视)果然真的是有技巧(哔哩哔哩)1、玩家亲测!拱趴...
热点推荐!!约局吧德州真的存在... 热点推荐!!约局吧德州真的存在透视吗,微信小程序微乐游戏辅助(透视)原来有有方法(哔哩哔哩)1)微信...
终于清楚!来玩app 德州 辅... 终于清楚!来玩app 德州 辅助,微信小程序微乐破解器(透视)切实存在有脚本(哔哩哔哩)所有人都在同...
技术分享!德州透视是真的假的,... 技术分享!德州透视是真的假的,微乐小程序辅助工具2025(透视)一直真的是有挂(哔哩哔哩)1、该软件...
免费测试版!线上德州的辅助器是... 免费测试版!线上德州的辅助器是什么,微乐陕西麻将破解(透视)都是存在有插件(哔哩哔哩)1、该软件可以...
玩家实测!约局吧怎么看有没有挂... 玩家实测!约局吧怎么看有没有挂,陕西微乐小程序辅助(透视)本来真的是有插件(哔哩哔哩)1、打开软件启...
玩家实测!拱趴游戏破解器,微乐... 玩家实测!拱趴游戏破解器,微乐自建房脚本免费下载(透视)总是真的有攻略(哔哩哔哩)1、下载好微乐自建...