1:POI与Excel的关系:
POI中的Workbook类对应Excel本身。
Sheet类对应sheet。
Row类对应excel的一行。
Cell类对应每个单元格。
2:导入解析步骤:
注意,这里没有对03版和07版的excel做区分。
1》导入需要的jar包:commons-collections.jar、poi.jar、poi-ooxml.jar、poi-ooxml-schemas.jar、poi-scratchpad.jar、xmlbeans.jar
2》创建Workbook对象:Workbook workbook = WorkbookFactroy.create(new File("要解析的文件路径");
这里要指出,此处的文件路径,指的是服务器从本地获取文件后,把文件转存的路径。如果只需要解析文件而不用保存文件,那么我们使用Fileupload,获取到FileItem后不保存文件,这里也就没有要解析的文件路径了。这里create还有一个文件流的作为参数的重载方法;可以使用:WorkbookFactory.create(fileItem.getInputStream()),把获取到的文件域流作为参数即可。
3》创建Sheet对象:Sheet sheet = workbook.getSheetAt(从0开始的整数)(或者:workbook.getSheet("sheet名字"))
4》获得行数:int rowNum = sheet.getLastRowNum();
5》获得行:因为有了行数,可以使用循环。当然只取指定的行也可以:Row row = sheet.getRow(i)。这里i也是从0开始的。
6》获得单元格:Cell cell = row.getCell(i)。这里i也是从0开始的。
7》获得单元格数据:对于不同格式的数据,有不同的获取方法。如:cell.getStringCellValue()获取字符串数据。cell.getNumericCellValue()获取数值数据。cell.getDateCellValue()获取日期数据。
3:excel导出功能的实现
1》创建workbook:Workbook workbook;
2》确认要创建的版本(03,07版),以启用不同的实现。07版使用:workbook = new XSSFWorkbook()
03版使用:workbook = new HSSFWorkbook()
3》创建Sheet:work.cerateSheet()。这里可以传入一个字符串为sheet命名,也可以使用默认的。
4》一般的excel表都有行和列。可以使用双层循环来控制实现:外层控制生成行:Row row = sheet.createRow(i)。这里i从0开始。内层控制生成单元格以及内容:Cell cell = row.createCell(j); cell.setCellValue("xxx"); 这里,j也是从0开始。xxx指单元格内容为字符串。此外,同导入一样,还有其他类型的数据。
这里要指出的是,所谓的从0开始,就是说写表格内容的时候,从左上角第一个单元格开始写。
到此,就写好了一个workbook对象,也即是一个excel表格。
5》如果是直接将workbook写到输出流,可以使用response.getOutputStream()方法获取一个ServletOutputStream 输出流:outputStream。然后使用workbook.write(outputstream)来写出excel。此外还要设置相应的头信息:
resp.setHeader("Content-Disposition","attachment;filename=qqq.xlsx")。这里格式是相对固定的,其中,输出的文件是什么名字及格式,qqq.xlsx相应的就写什么。加上这句,就意味着进行服务器会告诉浏览器进行下载的处理。
6》如果需要先保存再下载文件,可以先保存成文件。首先建立文件输出流:
FileOutputStream fileOutputStream = new FileOutputStream("xxxx");其中,xxxx指文件保存的路径。
然后,workbook.write(fileOutputStream)来将excel保存成文件。
之后,再是步骤5》中的操作,来提供文件的下载。
这里的导入导出的实现,具体的应用,根据项目需求进行编写。这里只提供一个基本的思路。