POI(excel) - WorkBook和Sheet

转自:https://blog.csdn.net/j080624/article/details/73551070

【1】WorkBook定义

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


【2】WorkBook两种创建形式

① 使用直接对象

org.apache.poi.hssf.usermodel.HSSFWorkbook 
or 
org.apache.poi.xssf.usermodel.XSSFWorkbook
  • 1
  • 2
  • 3

示例如下:

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

② 使用工厂对象

org.apache.poi.ss.usermodel.WorkbookFactory
  • 1

示例如下:

Workbook workbook = WorkbookFactory.create(file);
  • 1

参数不只可以为file:

这里写图片描述

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

示例如下:

FileOutputStream fos = new FileOutputStream(file);
workbook.write(fos);
fos.close();
//写入流
or
//写入文件
workbook.write(file);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

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


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

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

② 获取表格的版本:

hssfWorkbook.getSpreadsheetVersion();
  • 1

【3】Sheet

workSheet(工作表)的高级表现形式。

  • (1)创建方法:
HSSFSheet sheet = hssfWorkbook.createSheet("hello");
//创建的时候指定名字

or

//创建后指定名字
hssfWorkbook.setSheetName(index, sheetName);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

|

  • (1.1) 根据index 克隆sheet

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

HSSFSheet cloneSheet = hssfWorkbook.cloneSheet(1);
  • 1

这里写图片描述


  • (2)index:

sheet的索引是从 0 开始。


  • (3)获取未指定名字的新创建的sheet name:
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(new FileInputStream(file));
HSSFSheet createSheet = hssfWorkbook.createSheet();
String sheetName = createSheet.getSheetName();
  • 1
  • 2
  • 3

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

这里写图片描述

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

这里写图片描述


  • (4)根据index获取sheet
HSSFSheet sheetAtIndex = hssfWorkbook.getSheetAt(index);
  • 1
  • (4.1)根据sheet获取index
int sheetIndex = hssfWorkbook.getSheetIndex(sheetAtIndex );
  • 1

  • (5)根据name获取sheet
HSSFSheet sheet1 = hssfWorkbook.getSheet("Sheet1");
  • 1
  • (5.1)根据name获取index
int sheetIndex = hssfWorkbook.getSheetIndex("Sheet1");
  • 1

  • (6)获取workbook 中 sheet的数量
int numberOfSheets = hssfWorkbook.getNumberOfSheets();

默认为3
  • 1
  • 2
  • 3

  • (7)获取’活跃状态’ sheet index
int activeSheetIndex = hssfWorkbook.getActiveSheetIndex();
  • 1

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).

  • (7.1)根据index设置’活跃状态’ sheet
hssfWorkbook.setActiveSheet(index);
  • 1

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

hssfWorkbook.setActiveSheet(1);
  • 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:

这里写图片描述

  • (7.2) 根据index设置选定Tab
    hssfWorkbook.setSelectedTab(index);
  • 1
  • (7.3)根据collection 设置选定Tab
int[] ints = {1,2,3};
hssfWorkbook.setSelectedTabs(ints);
  • 1
  • 2

这里写图片描述

  • (7.4)获取选定状态的Tab
Collection<Integer> selectedTabs = hssfWorkbook.getSelectedTabs();
  • 1

  • (8) 根据index 移除sheet
hssfWorkbook.removeSheetAt(index);

--如果index超出了范围,将会抛出异常。
  • 1
  • 2
  • 3

  • (9)鉴别(或设置)sheet 隐藏
hssfWorkbook.setSheetHidden(1, true);

//设置index为1的sheet 隐藏

boolean sheetHidden = hssfWorkbook.isSheetHidden(1);

//判断index为1的sheet是否隐藏。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

  • (10)更改sheet 位置(index)
hssfWorkbook.setSheetOrder(sheetname, pos);

// pos0 位基数,其实就是index
  • 1
  • 2
  • 3

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

猜你喜欢

转载自blog.csdn.net/xf_zhen/article/details/80936476