jsp网站开发常常涉及到文档数据导入导出,如excel文件的操作
下面介绍一种技术POI操作excel文档,简单介绍的一个POI的HelloWorld
使用POI可以操作excel03版也就是xls后缀名的excel和07的xlsx文档,当然API略有差异
开始学习POI
操作03版excel———-读写
public void testWriteTo03Excel() throws Exception{
/*
* 使用POI操作03版excel即后缀为xls文档
* 案例,创建excel文档,设置第三行第三列内容为hello world
*/
//1.创建工作簿(workbook)
HSSFWorkbook workBook=new HSSFWorkbook();
//2.创建工作表(可以设置工作表名)
HSSFSheet sheet=workBook.createSheet("hello world");
//3.创建行
HSSFRow row = sheet.createRow(2);//索引从0开始
//4.创建单元格
HSSFCell cell = row.createCell(2);//索引从0开始
//5.设置单元格内容
cell.setCellValue("hello word");
//以上操作数据位于内存中,下面写入文档
//注意:write接收参数为OutputStream,说明在jsp可以直接输入到浏览器(下载excel)
FileOutputStream file = new FileOutputStream("F:\\03excel.xls");
workBook.write(file);
//关闭(先开后关原则)
file.close();
workBook.close();
}
@Test
public void testRead03Excel() throws Exception{
/*
* 读取03版excel数据
*/
//inputStream
FileInputStream file=new FileInputStream("F:\\03excel.xls");
//1.读取工作簿
HSSFWorkbook workBook=new HSSFWorkbook(file);
//2.读取工作表
HSSFSheet sheet=workBook.getSheetAt(0);
//3.读取行
HSSFRow row = sheet.getRow(2);
//4.读取单元格数据
HSSFCell cell=row.getCell(2);
System.out.println("文件内容为:"+cell.getStringCellValue());
workBook.close();
file.close();
}
操作07版excel———-读写
@Test
public void testWriteTo07Excel() throws Exception{
/*
*向07版excel写数据
*/
//1.创建工作簿(workbook)
XSSFWorkbook workBook=new XSSFWorkbook();
//2.创建工作表(可以设置工作表名)
XSSFSheet sheet=workBook.createSheet("Hello world");
//3.创建行
XSSFRow row = sheet.createRow(2);//索引从0开始
//4.创建单元格
XSSFCell cell = row.createCell(2);//索引从0开始
//5.设置单元格内容
cell.setCellValue("Hello Excel-2007");
//以上操作数据位于内存中,下面写入文档
//注意:write接收参数为OutputStream,说明在jsp可以直接输入到浏览器(下载excel)
FileOutputStream file = new FileOutputStream("F:\\07excel.xlsx");
workBook.write(file);
//关闭(先开后关原则)
file.close();
workBook.close();
}
@Test
public void testRead07Excel() throws Exception{
/*
* 读取07版excel数据
*/
//inputStream
FileInputStream file=new FileInputStream("F:\\07excel.xlsx");
//1.读取工作簿
XSSFWorkbook workBook=new XSSFWorkbook(file);
//2.读取工作表
XSSFSheet sheet=workBook.getSheetAt(0);
//3.读取行
XSSFRow row = sheet.getRow(2);
//4.读取单元格数据
XSSFCell cell=row.getCell(2);
System.out.println("文件内容为:"+cell.getStringCellValue());
workBook.close();
file.close();
}
文档读取,不能去规定用户的Excel版本,那么有没有办法可以操作用户上传的不同的Excel版本呢??
答案:当然有,那就是他们的接口
下面演示如何判断用户上传文件,并区分03或者07版excel文件,并进行读取操作
@Test
public void testRead07Or03Excel() throws Exception{
/*
* 读取03或者07版excel通用方法
* 使用HSSFWorkBook与XSSFWorkBook的公共接口WorkBook
*/
//1.判断文件类型,首先是不是excel文件,然后判断是xls还是xlsx
String fileName="F:\\03excel.xls";
String regexExcelFileName="^.+\\.((xlsx)|(xls))$";//匹配文件名后缀为xls/xlsx
if(fileName.matches(regexExcelFileName)){//是excel文件
Workbook workBook=null;
FileInputStream file=new FileInputStream(fileName);
//判断是03或者07
boolean is03Excel=fileName.matches("^.+\\.(xls)$");
//1.读取工作簿
workBook=is03Excel?new HSSFWorkbook(file):new XSSFWorkbook(file);
//2.读取工作表
Sheet sheet=workBook.getSheetAt(0);
//3.读取行
Row row = sheet.getRow(2);
//4.读取单元格数据
Cell cell=row.getCell(2);
System.out.println("文件内容为:"+cell.getStringCellValue());
workBook.close();
file.close();
}
}