使用Workbook读取表格问题总结

news2025/1/11 11:10:50

使用Workbook读取表格问题总结

  • 一、Workbook类型
  • 二、问题总结
    • 1.SXSSFWorkbook为什么我Create了一万行Row但是却获取不到?
    • 2.读取表格


一、Workbook类型

Workbook分三种类型:
1.HSSFWorkbook 用于Excel2003版及更早版本(扩展名为.xls)的导出;
2.XSSFWorkbook 用于Excel2007版(扩展名为.xlsx)的导出;
3.SXSSFWorkbook:相对前面两种,会在导出数据达到万以上的数据,会报内存不足,导致失败的问题。这时就要用到sxssf,来导出较大数据量

注:
HSSFWorkbook和XSSFWorkbook的Excel Sheet导出条数上限(<=2003版)是65535行、256列,(>=2007版)是1048576行,16384列,如果数据量超过了此上限,那么可以使用SXSSFWorkbook来导出。实际上上万条数据,甚至上千条数据就可以考虑使用SXSSFWorkbook了。
经测试,同样向表格中写入50w条数据,使用SXSSFWorkbook向Excel中写入50万条数据,只需要34秒左右,内存占用率最多在700M左右,CPU使用率在25%左右;使用XSSFWorkbook内存占用率最多在2.1个G左右(占用了很大的内存),CPU使用率在90%左右,最后内存溢出了。。。


二、问题总结

1.SXSSFWorkbook为什么我Create了一万行Row但是却获取不到?

这时要注意到SXSSFWorkbook的构造函数中的rowAccessWindowSize
在这里插入图片描述
这个参数,会指定一个sheet可读取的row数目,超过该数目的row,会被写入到磁盘文件中,进而不能在通过getRow访问到,通过这种方式,内存使用空间就缩小很多了。

需要注意的是,如果该值指定为-1,说明不限制行数,所有记录都写入内存中;该值不能取0,因为这意味着任何新row都会写入磁盘,进而不能访问


2.读取表格

读取表格时先要用XSSFWorkbook加载,再用SXSSFWorkbook 构造,代码如下(示例):

InputStream fis = new FileInputStream(file);
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fis);
SXSSFWorkbook workbook = new SXSSFWorkbook(xssfWorkbook, -1);

而且读取内容、行数等时要先调用getXSSFWorkbook。因为所有的初始模板记录存在于XSSFWorkbook中,需要用sxssfWorkbook.getXSSFWorkbook()方法去获取初始模板的行数据。这也可以解释为什么其构造函数中有XSSFWorkbook了。例如下面获取sheet页行数的方法:

/**
     * 返回sheet 中的行数
     *
     * @param sheetIx 指定 Sheet 页,从 0 开始
     * @return
     */
    public int getRowCount(int sheetIx)
    {
    //xlsx格式。将SXSSFWorkbook转成XSSFWorkbook,再获取XSSFSheet
    if (isXlsx)
    {
        XSSFSheet sheet = ((SXSSFWorkbook) workbook).getXSSFWorkbook().getSheetAt(sheetIx);
        return sheet.getPhysicalNumberOfRows();
    }
    //xls格式,直接读取
    else
    {
        Sheet sheet = workbook.getSheetAt(sheetIx);
        return sheet.getPhysicalNumberOfRows();
    }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果手机备忘录密码忘记了怎么办?快速解锁,亲测有效

很多小伙伴喜欢使用苹果手机的备忘录来记录重要的事情&#xff0c;并且还会给备忘录设置密码。可是使用的时间长了&#xff0c;就忘记了自己备忘录密码了。苹果手机备忘录密码忘记了怎么办&#xff1f;别担心&#xff0c;今天小编分享一个亲测有效的方法&#xff0c;快来看看吧…

纳瓦电子前向77GHz毫米波雷达获国内新能源头部车企定点!

伴随着中国自主品牌新车搭载ADAS功能的高速增长&#xff0c;中国本土毫米波雷达供应商迎来了前所未有的机遇期。 高工智能汽车研究院监测数据显示&#xff0c;今年1-11月中国市场&#xff08;不含进出口&#xff09;乘用车前装标配搭载前向毫米波雷达交付上险755.53万颗&#…

一站式开发平台 赋能办公全场景

近几年&#xff0c;数字化办公迎来了新的机遇&#xff0c;根据亿欧智库《2022中国数字化办公市场研究报告》推算&#xff0c;数字化办公2021年的市场规模达到973.89亿元&#xff0c;至2025年将达到1768.16亿元&#xff0c;整体增速保持平稳&#xff0c;2018-2025年的CAGR为15.8…

写IB EE(Extended Essay)时容易犯的五大错误

EE的重要性无需多言&#xff0c;EE和TOK一共占IB45分总分的3分&#xff0c;其中一门拿到E的话&#xff0c;就会fail&#xff0c;拿不到IB的diploma。虽说和学校老师会有meeting讨论的机会&#xff0c;但时间有限&#xff0c;提供的精准指导也有限。EE的要求很严谨&#xff0c;很…

基于java SSM springboot动物检疫信息管理系统设计和实现

基于java SSM springboot动物检疫信息管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获…

Java集合(八)Map接口

我们来查看Map接口&#xff1a; 里面的k-v和set集合的不同之处在于&#xff1a;key仍然是一个对象&#xff0c;但是对于set来说value是一个常量&#xff0c; private static final Object PRESENT new Object(); set里面的value放的是 静态性质的PRESENT。 而map的value是自…

Issue—C#—ssl相关错误

报错&#xff1a;.net 6 : {"MessageTemplate": "An unhandled exception has occurred while executing the request.""Exception": "System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exc…

函数(基础)

目录 一、字符串函数 &#xff08;一&#xff09;常用的字符串函数 &#xff08;二&#xff09;举例 1. concat&#xff08;拼接&#xff09; 2. Lower(大写变小写) 3. upper(小写变大写) 4. lpad(左填充) 5. rpad(右填充) 6. trim(去掉前后空格) 7. ltrim(去掉左边…

Linux-远程管理命令

1.关机/重启序号命令对应英文作用01shutdown 选项 时间shutdown关机/重新启动1.1shutdownshutdown命令可以安全关闭或者重新启动系统选项含义-r重新启动提示&#xff1a;不指定选项和参数&#xff0c;默认表示1分钟之后关闭电脑远程维护服务器时&#xff0c;最好不要关闭系统&a…

Centos7 U盘 安装

目录 一 描述环境 二 下载镜像 2.1 阿里云下载地址: 2.2 Centos 下载&#xff1a; 三 制作U盘启动盘 3.1 下载软碟通 最新UltraISO官方免费下载 - UltraISO软碟通中文官方网站下载https://cn.ultraiso.net/xiazai.html 3.2 傻瓜安装即可&#xff08;不赘述&#xff09; 3.3…

怎么移除css的hover事件

移除css hover事件的方法&#xff1a;1、&#xff1b;通过“$("a").hover(function(){ alert(mouseover); }, function(){ alert(mouseout); })”方法绑定hover事件&#xff1b;2、通过“$(a).off(mouseenter).unbind(mouseleave);”方法取消绑定的hover事件即可。 j…

Filesystem closed报错问题处理

使用HDFS的时候 final Configuration conf new Configuration(); final FileSystem fs FileSystem.get(URI.create(hdfsFile), conf); final Path path new Path(hdfsFile); if (fs.exists(path)) {final FSDataInputStream is fs.open(path);final FileStatus stat fs.g…

一文细说OpenCL框架

说明&#xff1a; 子曾经曰过&#xff1a;不懂Middleware的系统软件工程师&#xff0c;不是一个好码农&#xff1b; 1. 介绍 OpenCL(Open Computing Language&#xff0c;开放计算语言&#xff09;&#xff1a;从软件视角看&#xff0c;它是用于异构平台编程的框架&#xff1b…

华为OD测试岗面经,一周走完面试流程

一周走完面试流程&#xff0c;10.18 机考&#xff0c;机试210 第一题:【最大N个数与最小N个数的和】 第二题&#xff1a;拼接URL 第三题&#xff1a;跳格子 性格测试:题目比较多&#xff0c;有一百多道&#xff0c;在三个选项中选出一个最符合的和一个最不符合的。答题的时候以…

C++:string模拟实现(下)

目录 一.引言 二.string类的容量操作接口 三.string类的字符串修改操作接口 1.两个插入字符的重载函数&#xff1a; 2.在string字符串末尾追加内容的接口 3.在指定位置pos删除n个字符的接口 四.string类字符串的字符和子串查找接口 五.全局定义的string类字符串比较运算…

SSM项目-小说网站

目录 设计目标 需求分析 网站主页 用户注册 1、需求分析 2、数据库设计 3、生成验证码 4、数据加密 1、MD5 2、BCrypt加密 5、数据交换格式 用户登录 找回密码 新用户注册 邮件发送 检测登录状态 书架功能 查看书架 添加书籍进入书架 删除书架上的书籍 获…

kafka在zookeeper中存储结构

1、存储结构图 2、ZooKeeper命令 ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val…

Verticle-align

1.verticle-align的官方解释及所产生的疑问 1.1 vertical-align的官方解释 vertical-align会影响 行内块级元素 在一个 行盒 中垂直方向的位置 【这里有重点词汇&#xff0c;一个行盒&#xff0c;行内块元素&#xff0c;为什么不包括块元素呢&#xff0c;因为块元素是独占一行…

TOP10:餐饮店设计排行榜(2023年最新排名)

随着我国经济不断的高速发展&#xff0c;自13年以来&#xff0c;大众化餐饮市场呈现良好发展趋势&#xff0c;已由13年的2.64万亿增长到3.96万亿&#xff0c;增长率为10.7%&#xff0c;预计2017年到2022年增长速度为9.9%&#xff0c;达到6.28万亿。其中中餐主题餐饮占比维持在8…

JVM 基础 - Java 类加载机制

Java 类加载机制类加载器的分类类加载机制类加载器的分类 如果有必要&#xff0c;我们还可以加入自定义的类加载器。因为JVM自带的ClassLoader只是懂得从本地文件系统加载标准的java class文件&#xff0c;因此如果编写了自己的ClassLoader&#xff0c;便可以做到如下几点&…