工作簿的高级表现形式,是sheet的上级对象。一个excel就是一个工作簿,一个工作簿含有多个工作表(sheet)。
① 使用直接对象
org.apache.poi.hssf.usermodel.HSSFWorkbook
or
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();
workSheet(工作表)的高级表现形式。
HSSFSheet sheet = hssfWorkbook.createSheet("hello");
//创建的时候指定名字
or
//创建后指定名字
hssfWorkbook.setSheetName(index, sheetName);
|
会同时克隆sheet中的数据,并将克隆的sheet置于工作簿最后次序。
HSSFSheet cloneSheet = hssfWorkbook.cloneSheet(1);
sheet的索引是从 0 开始。
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(new FileInputStream(file));
HSSFSheet createSheet = hssfWorkbook.createSheet();
String sheetName = createSheet.getSheetName();
如果未指定名字,那么将会使用”Sheet+index”进行命名。
如果工作表中已经存在了该名字,那么打开Excel会提示异常,点击”是”打开,会发现该sheet名字被重写了。
HSSFSheet sheetAtIndex = hssfWorkbook.getSheetAt(index);
int sheetIndex = hssfWorkbook.getSheetIndex(sheetAtIndex );
HSSFSheet sheet1 = hssfWorkbook.getSheet("Sheet1");
int sheetIndex = hssfWorkbook.getSheetIndex("Sheet1");
int numberOfSheets = hssfWorkbook.getNumberOfSheets();
默认为3
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).
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:
hssfWorkbook.setSelectedTab(index);
int[] ints = {1,2,3};
hssfWorkbook.setSelectedTabs(ints);
Collection selectedTabs = hssfWorkbook.getSelectedTabs();
hssfWorkbook.removeSheetAt(index);
--如果index超出了范围,将会抛出异常。
hssfWorkbook.setSheetHidden(1, true);
//设置index为1的sheet 隐藏
boolean sheetHidden = hssfWorkbook.isSheetHidden(1);
//判断index为1的sheet是否隐藏。
hssfWorkbook.setSheetOrder(sheetname, pos);
// pos 以 0 位基数,其实就是index。
获取workbook和sheet后,就可以对sheet中的row和cell进行读写!