POI(excel)中WorkBook和Sheet应用实践总结

article/2025/9/8 21:39:44

WorkBook定义

工作簿的高级表现形式,是sheet的上级对象。一个excel就是一个工作簿,一个工作簿含有多个工作表(sheet)。

【1】WorkBook两种创建形式

① 使用直接对象

// 03版本  .xls
org.apache.poi.hssf.usermodel.HSSFWorkbook 
or //07版本  .xlsx
org.apache.poi.xssf.usermodel.XSSFWorkbook

示例如下:

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));

② 使用工厂对象

org.apache.poi.ss.usermodel.WorkbookFactory

示例如下:

Workbook workbook = WorkbookFactory.create(file);

参数不只可以为file:

这里写图片描述

上述是直接读一个excel为workbook对象。也可以创建一个空对象,然后创建sheet,row and cell并写入到一个excel。

示例

FileOutputStream fos = new FileOutputStream(file);
workbook.write(fos);
fos.close();
//写入流
or
//写入文件
workbook.write(file);

同样,可以根据上面两种方式,将修改后的workbood重新刷入读取的原文件。

这里需要注意,一定要手动关闭流。WorkBook不会帮你关闭!

鉴别上传表格的版本–控制文件格式

  • ① 获取文件拓展名,判断是"xls"或者是"xlsx"。

  • ② 获取表格的版本:

    hssfWorkbook.getSpreadsheetVersion();
    

【2】Sheet

workSheet(工作表)的高级表现形式,sheet的索引是从 0 开始。

(1)创建方法

HSSFSheet sheet = hssfWorkbook.createSheet("hello");
//创建的时候指定名字or//创建后指定名字
hssfWorkbook.setSheetName(index, sheetName);

根据index 克隆sheet

会同时克隆sheet中的数据,并将克隆的sheet置于工作簿最后次序。

HSSFSheet cloneSheet = hssfWorkbook.cloneSheet(1);

这里写图片描述

(2)获取sheet name

获取未指定名字的新创建的sheet name:

HSSFWorkbook hssfWorkbook = new HSSFWorkbook(new FileInputStream(file));
HSSFSheet createSheet = hssfWorkbook.createSheet();
String sheetName = createSheet.getSheetName();

如果未指定名字,那么将会使用"Sheet+index"进行命名。

这里写图片描述

如果工作表中已经存在了该名字,那么打开Excel会提示异常,点击"是"打开,会发现该sheet名字被重写了。

这里写图片描述


(3) sheet获取与设置

根据index获取sheet

HSSFSheet sheetAtIndex = hssfWorkbook.getSheetAt(index);

根据sheet获取index

int sheetIndex = hssfWorkbook.getSheetIndex(sheetAtIndex );

根据name获取sheet

HSSFSheet sheet1 = hssfWorkbook.getSheet("Sheet1");

根据name获取index

int sheetIndex = hssfWorkbook.getSheetIndex("Sheet1");

根据index 移除sheet

hssfWorkbook.removeSheetAt(index);--如果index超出了范围,将会抛出异常。

鉴别(或设置)sheet 隐藏

hssfWorkbook.setSheetHidden(1, true);//设置index为1的sheet 隐藏boolean sheetHidden = hssfWorkbook.isSheetHidden(1);//判断index为1的sheet是否隐藏。

更改sheet 位置(index)

hssfWorkbook.setSheetOrder(sheetname, pos);// pos 以 0 位基数,其实就是index。

获取workbook和sheet后,就可以对sheet中的row和cell进行读写!

获取workbook 中 sheet的数量

int numberOfSheets = hssfWorkbook.getNumberOfSheets();

获取’活跃状态’ sheet index

int activeSheetIndex = hssfWorkbook.getActiveSheetIndex();

gets the tab whose data is actually seen when the sheet is opened.
This may be different from the “selected sheet” since excel seems to allow you to show the data of one sheet when another is seen “selected” in the tabs (at the bottom).

根据index设置’活跃状态’ sheet

hssfWorkbook.setActiveSheet(index);

Excel默认打开第一个sheet。如下所示,设置之后将直接打开第二个sheet:

hssfWorkbook.setActiveSheet(1);

这里写图片描述

注意与"selected Tab区别"。Active表示你打开工作簿看到的数据所在的sheet ,而 “selected Tab” 表示处于选定状态的tab–显示sheet name的地方。

二者并不冲突,默认情况下, “selected Tab” 随 Active sheet。即,设置sheet为Action,将会默认设置为selected。

如下图所示,selected Tab index 为1 2 3;显示数据 index 为 1:

这里写图片描述

(4) tab的选取

根据index设置选定Tab

	hssfWorkbook.setSelectedTab(index);

根据collection 设置选定Tab

int[] ints = {1,2,3};
hssfWorkbook.setSelectedTabs(ints);

这里写图片描述

获取选定状态的Tab

Collection<Integer> selectedTabs = hssfWorkbook.getSelectedTabs();

http://chatgpt.dhexx.cn/article/vibYbGLv.shtml

相关文章

Java多线程:Executors

Executors类位于java.util.concurrent包下&#xff0c;提供了一些方便构建ThreadPoolExecutor和线程管理的方法。 主要方法有以下几个&#xff1a; 1.创建一个固定大小的线程池 public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecu…

【Java多线程】线程池【ExecutorServicec和Executors】

➤ Java多线程编程【一文全解】 背景&#xff1a;经常创建和销毁、使用量特别大的资源&#xff0c;比如并发情况下的线程&#xff0c;对性能影响很大&#xff1b; 思路&#xff1a;提前创建好多个线程&#xff0c;放入线程池中&#xff0c;使用时直接获取&#xff0c;使用完放…

为什么不建议用Executors创建线程池???

来源 | www.cnblogs.com/zjfjava/p/11227456.html 01、通过Executors创建线程池的弊端02、通过ThreadPoolExecutor创建线程池03、ThreadPoolExecutor参数解释04、corePoolSize & maximumPoolSize05、keepAliveTime & unit06、等待队列07、拒绝策略08、ThreadPoolExecut…

Executors和ThreadPoolExecutor详解

概述 在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供&#xff0c;不允许在应用中自行显示的创建线程&#xff0c;这样一方面是线程的创建更加规范&#xff0c;可以合理控制开辟线程的数量&#xff1b;另一方面线程的细节管理交给线程池处理&#xff0c;优化了资…

4.Executor执行器

1.Executor 主体结构 Executor是MyBatis执行者接口&#xff0c;执行器的功能包括&#xff1a; 基本功能&#xff1a;改、查&#xff0c;没有增删的原因是&#xff0c;所有的增删操作都可以归结到改。缓存维护&#xff1a;这里的缓存主要是为一级缓存服务&#xff0c;功能包括…

ExecutorService

本文翻译自http://tutorials.jenkov.com/java-util-concurrent/executorservice.html&#xff0c;人工翻译&#xff0c;仅供学习交流。 ExecutorService java.util.concurrent.ExecutorService接口是一种能够在后台并发执行任务的异步执行机制。本文中&#xff0c;我将会介绍…

Executor概述

在Java类库中&#xff0c;任务执行的主要抽象不是Thread&#xff0c;而是Executor。 public interface Executor {void execute(Runnable command); }它为灵活且强大的异步任务执行框架提供了基础&#xff0c;该框架能支持多种不同类型的任务执行策略。它提供了一种标准的方法…

Executor框架简介

Executor系统中&#xff0c;将线程任务提交和任务执行进行了解耦的设计; 线程被一对一映射为服务所在操作系统线程&#xff0c;启动时会创建一个操作系统线程&#xff1b;当该线程终止时&#xff0c;这个操作系统线程也会被回收 Executor框架包含的核心接口和主要的实现类 具体…

Executors 源码解析(JDK8)

前言 本文隶属于专栏《100个问题搞定Java并发》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见100个问题搞定Java并发 正文 类注释 /*** Factory and util…

Executor框架

转载请以链接形式标明出处&#xff1a; 本文出自:103style的博客 Java并发编程的艺术笔记 并发编程的挑战Java并发机制的底层实现原理Java内存模型Java并发编程基础Java中的锁的使用和实现介绍Java并发容器和框架Java中的12个原子操作类介绍Java中的并发工具类Java中的线程池E…

Executor执行器

分为四个模块&#xff1a; 1.动态代理MapperProxy 2.SQL会话SqlSesson 3.执行器Executor 4.JDBC处理器StatementHandler 现讲述为SQL会话与执行器 一、SQL会话SqlSesson 该门面模式提供一个统一的门面接口API 该模式提供的一个基本API为增删改查&#xff0c;还会提供提…

Java并发多线程编程——Executors类

目录 一、Executors的理解二、Executors类图结构二、Executors常用的方法三、线程池的创建分为两种方式&#xff08;主要介绍通过Executors类创建的方式&#xff09;1、newFixedThreadPool方法示例2、newSingleThreadExecutor方法示例3、newCachedThreadPool方法4、newSchedule…

Executors一篇就够

Executors框架包含的内容十分的多&#xff1a;看图&#xff1a; 一、各个接口的作用 按照图示关系进行介绍&#xff1a; Executor 该接口作为顶层接口只有一个execute()方法 execute(Runnable r) 该接口接受一个Runnable实例&#xff0c;即要执行的任务ExecutorService 该…

Executors工具类的相关方法

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生。本篇将记录创建线程池的Executors工具类里面的方法&#xff0c;方便加深知识印象和复习使用。 本篇文章记录的基础知识&#xff0c;适合在学Java的小白&#xff0c;也适合复习中&#xff0c;面试中的大佬&a…

java并发编程:Executor、Executors、ExecutorService

Executors 在Java 5之后&#xff0c;并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的&#xff0c;其内部使用了线程池机制&#xff0c;它在java.util.cocurrent 包下&#xff0c;通过该框架来控制线程的启动、执行和关闭&#xff0c;可以简化…

nlinfit非线性回归拟合

% % 使用指定函数对下述两变量进行曲线拟合 % % yak1*exp(m*t)k2*exp(-m*t); % % 离散点: t[0,4,8,40], % % y[20.09,64.52,85.83,126.75]; % % t-自变量 y-因变量 a,m,k1,k2为常数 % % 用非线性回归nlinfit&#xff0c;如果数据点多些&#xff0c;效果会更好。 脚本&…

matlab的nlinfit函数,用matlab如何进行非线性拟合 nlinfit函数?

用非线性回归nlinfit&#xff0c;如果数据点多些&#xff0c;效果会更好。 function nonlinefit clc;clear; t[0 4 8 40]; y[20.09 64.52 85.83 126.75]; betanlinfit(t,y,myfunc,[1 1 1 1]) abeta(1) k1beta(2) k2beta(3) mbeta(4) tt0:1:40 yyak1*exp(m*tt)k2*exp(-m*tt) plo…

【MATLAB统计分析与应用100例】案例013:matlab读取Excel数据,调用nlinfit函数作一元非线性回归

1. 一元线性回归分析效果预览 2. matlab完整实现代码 %读取数据,绘制散点图** HeadData = xlsread(examp08_02.xls); %从Excel文

matlab中用polyfit、regress、nlinfit等进行详细的回归分析

目录 1.说明2.回归的介绍2-1.前面两篇所发现的一些问题2-1-1.回归和拟合是什么关系?2-1-2.回归到底是做预测还是用来去脏数据?3.三个函数的核心:最小二乘法3-1.介绍3-2.matlab代码4.函数polyfit(线性)5.函数regress(线性)5-1.输出b,bint,r,rint,stats5-2.应用5.2-1.一元…

曲线拟和函数lsqcurvefit nlinfit

转载自&#xff1a;http://panda0411.com/2011/08/29/curve-fit-and-function-lsqcurvefitnlinfit/ 琢磨了好久matlab自带的曲线拟和工具箱, 发现这货只能解决从离散数据得到各种类型的拟和效果, 但是反之貌似没法实现, google一下有这两个函数可以用:lsqcurvefit和nlinfit ls…