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();
        }
    }