3.POI入门(了解)
3.1 POI 概述
3.1.1 简介
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
3.1.2 官网
Apache POI - the Java API for Microsoft Documents
3.2 入门案例
3.2.1 环境搭建
创建项目:修改pom<dependencies><!--xls--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><!--xlsx--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency><!--日期格式化工具--><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version></dependency><!--test--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies>
3.2.2 xls文件写操作
- excel2003 文件扩展名为 xls
- 名词:
- 工作簿:一个excel文件,就是一个工作簿
- 工作表:一个工作簿中,可以所有多个工作表Sheet
- 行:每一个工作表,包含多行row
- 单元格:每行有多个单元格Cell组成。
packagecom.zx.poi; importorg.apache.poi.hssf.usermodel.HSSFWorkbook; importorg.apache.poi.ss.usermodel.Cell; importorg.apache.poi.ss.usermodel.Row; importorg.apache.poi.ss.usermodel.Sheet; importorg.apache.poi.ss.usermodel.Workbook; importorg.joda.time.DateTime; importorg.junit.Test; importjava.io.FileOutputStream; importjava.io.IOException; publicclassExcel03Test { publicvoidtestWrite03() throwsIOException { // 创建新的Excel 工作簿Workbookworkbook=newHSSFWorkbook(); // 在Excel工作簿中建一工作表,其名为缺省值 Sheet0//Sheet sheet = workbook.createSheet();// 如要新建一名为"信息统计"的工作表,其语句为:Sheetsheet=workbook.createSheet("信息统计"); // 创建行(row 1)Rowrow1=sheet.createRow(0); // 创建单元格(col 1-1)Cellcell11=row1.createCell(0); cell11.setCellValue("今日人数"); // 创建单元格(col 1-2)Cellcell12=row1.createCell(1); cell12.setCellValue(666); // 创建行(row 2)Rowrow2=sheet.createRow(1); // 创建单元格(col 2-1)Cellcell21=row2.createCell(0); cell21.setCellValue("统计时间"); //创建单元格(第三列)Cellcell22=row2.createCell(1); StringdateTime=newDateTime().toString("yyyy-MM-dd HH:mm:ss"); cell22.setCellValue(dateTime); // 新建一输出文件流(注意:要先创建文件夹)FileOutputStreamout=newFileOutputStream("d://zx/a.xls"); // 把相应的Excel 工作簿存盘workbook.write(out); // 操作结束,关闭文件out.close(); System.out.println("文件生成成功"); } }
3.2.3 xlsx 文件写操作
excel2007+ 文件扩展名为 xlsx
packagecom.zx.poi; importorg.apache.poi.hssf.usermodel.HSSFWorkbook; importorg.apache.poi.ss.usermodel.Cell; importorg.apache.poi.ss.usermodel.Row; importorg.apache.poi.ss.usermodel.Sheet; importorg.apache.poi.ss.usermodel.Workbook; importorg.apache.poi.xssf.usermodel.XSSFWorkbook; importorg.joda.time.DateTime; importorg.junit.Test; importjava.io.FileOutputStream; importjava.io.IOException; publicclassExcel07Test { publicvoidtestWrite07() throwsIOException { // 创建新的Excel 工作簿Workbookworkbook=newXSSFWorkbook(); // 在Excel工作簿中建一工作表,其名为缺省值 Sheet0//Sheet sheet = workbook.createSheet();// 如要新建一名为"信息统计"的工作表,其语句为:Sheetsheet=workbook.createSheet("信息统计"); // 创建行(row 1)Rowrow1=sheet.createRow(0); // 创建单元格(col 1-1)Cellcell11=row1.createCell(0); cell11.setCellValue("今日人数"); // 创建单元格(col 1-2)Cellcell12=row1.createCell(1); cell12.setCellValue(666); // 创建行(row 2)Rowrow2=sheet.createRow(1); // 创建单元格(col 2-1)Cellcell21=row2.createCell(0); cell21.setCellValue("统计时间"); //创建单元格(第三列)Cellcell22=row2.createCell(1); StringdateTime=newDateTime().toString("yyyy-MM-dd HH:mm:ss"); cell22.setCellValue(dateTime); // 新建一输出文件流(注意:要先创建文件夹)FileOutputStreamout=newFileOutputStream("d://zx/b.xlsx"); // 把相应的Excel 工作簿存盘workbook.write(out); // 操作结束,关闭文件out.close(); System.out.println("文件生成成功"); } }
3.2.4 xls 文件读操作
// xls 2003 文件读操作publicvoidtestXlsRead() throwsException { //1 确定文件流FileInputStreamis=newFileInputStream("D:\\xml\\user.xls"); //2 开始读// 2.1 工作簿HSSFWorkbookworkbook=newHSSFWorkbook(is); // 2.2 工作表HSSFSheetsheet=workbook.getSheet("用户表"); introwStart=sheet.getFirstRowNum(); //第一行索引号(从0开始)introwEnd=sheet.getLastRowNum(); //最后一行的索引号(从0开始)// 2.3 行for(inti=rowStart ; i<=rowEnd ; i++) { HSSFRowrow=sheet.getRow(i); intcellStart=row.getFirstCellNum(); //第一列的索引号(从0开始)intcellEnd=row.getLastCellNum() ; //最后一列的编号(从1开始)// 2.4 列for(intc=cellStart; c<cellEnd ; c++) { HSSFCellcell=row.getCell(c); // System.out.println(cell.getCellType());if(cell.getCellType() ==Cell.CELL_TYPE_STRING) { // 字符串System.out.print(row.getCell(c).getStringCellValue() +", "); } if(cell.getCellType() ==Cell.CELL_TYPE_NUMERIC) { // 字符串System.out.print(row.getCell(c).getNumericCellValue() +", "); } } System.out.println(); } // 3 释放资源is.close(); }
3.2.5 xlsx 文件读操作
// xlsx 2007 文件读操作publicvoidtestXlsxRead() throwsException { //1 确定文件流FileInputStreamis=newFileInputStream("D:\\xml\\user.xlsx"); //2 开始读// 2.1 工作簿Workbookworkbook=newXSSFWorkbook(is); // 2.2 工作表Sheetsheet=workbook.getSheet("用户表"); introwStart=sheet.getFirstRowNum(); //第一行索引号(从0开始)introwEnd=sheet.getLastRowNum(); //最后一行的索引号(从0开始)// 2.3 行for(inti=rowStart ; i<=rowEnd ; i++) { Rowrow=sheet.getRow(i); intcellStart=row.getFirstCellNum(); //第一列的索引号(从0开始)intcellEnd=row.getLastCellNum() ; //最后一列的编号(从1开始)// 2.4 列for(intc=cellStart; c<cellEnd ; c++) { Cellcell=row.getCell(c); // System.out.println(cell.getCellType());if(cell.getCellType() ==Cell.CELL_TYPE_STRING) { // 字符串System.out.print(row.getCell(c).getStringCellValue() +", "); } if(cell.getCellType() ==Cell.CELL_TYPE_NUMERIC) { // 字符串System.out.print(row.getCell(c).getNumericCellValue() +", "); } } System.out.println(); } // 3 释放资源is.close(); }
3.2.6 读取不同类型的数据
publicvoidtestRead07() throwsException{ InputStreamis=newFileInputStream("d:/0704.xlsx"); Workbookworkbook=newXSSFWorkbook(is); Sheetsheet=workbook.getSheetAt(0); // 读取第一行第一列Rowrow=sheet.getRow(0); Cellcell1=row.getCell(0); Cellcell2=row.getCell(1); // 输出单元内容System.out.println(cell1.getStringCellValue()); System.out.println(cell2.getNumericCellValue()); // 操作结束,关闭文件is.close(); }