本文共 2742 字,大约阅读时间需要 9 分钟。
Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft
Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。 jxl:专门操作Excel maven坐标:org.apache.poi poi 3.14 org.apache.poi poi-ooxml 3.14
POI结构:
HSSF - 提供读写Microsoft Excel XLS格式档案的功能XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能HWPF - 提供读写Microsoft Word DOC格式档案的功能HSLF - 提供读写Microsoft PowerPoint格式档案的功能HDGF - 提供读Microsoft Visio格式档案的功能HPBF - 提供读Microsoft Publisher格式档案的功能HSMF - 提供读Microsoft Outlook格式档案的功能
使用POI可以从一个已经存在的Excel文件中读取数据
//加载指定文件,创建一份Excel对象(工作簿)XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("C:\\Users\\61443\\Desktop\\poi.xlsx")));//读取Excel文件中第一个Sheet标签页XSSFSheet sheet = excel.getSheetAt(0);//遍历Sheet标签页,获得每一行数据for (Row row : sheet) { //遍历行,获得每个单元格对象 for (Cell cell : row) { System.out.println(cell.getStringCellValue()); }}excel.close();
通过上面的入门案例可以看到,POI操作Excel表格封装了几个核心对象:
XSSFWorkbook:工作簿XSSFSheet:工作表Row:行Cell:单元格
上面案例是通过遍历工作表获得行,遍历行获得单元格,最终获取单元格中的值。
还有一种方式就是获取工作表最后一个行号,从而根据行号获得行对象,通过行获取最后一个单元格索引,从而根据单元格索引获取每行的一个单元格对象,代码如下:
//加载指定文件,创建一份Excel对象(工作簿)XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("C:\\Users\\61443\\Desktop\\poi.xlsx")));//读取Excel文件中第一个Sheet标签页XSSFSheet sheet = excel.getSheetAt(0);//获得当前工作表中最后一个行号,需要注意:行号从0开始int lastRowNum = sheet.getLastRowNum();//lastRowNum的计数是从0开始的,所有需要等于号,才可以遍历完毕,即俩行lastRowNum为1for (int i = 0; i <= lastRowNum; i++) { //根据行号获取每一行 XSSFRow row = sheet.getRow(i); //获取当前行最后一个单元格索引 short lastCellNum = row.getLastCellNum(); //getCell()索引是从0开始的,而lastCellNum的计数是从1开始的,不需要等于号,就可以遍历完毕,即俩格lastCellNum为2 for (int j = 0; j < lastCellNum; j++) { //根据单元格索引获取单元格对象 XSSFCell cell = row.getCell(j); System.out.println(cell.getStringCellValue()); }}excel.close();
使用POI可以在内存中创建一个Excel文件并将数据写入到这个文件,最后通过输出流将内存中的Excel
文件下载到磁盘//在内存中创建一个Excel文件XSSFWorkbook workbook = new XSSFWorkbook();//创建工作表,指定工作表名称XSSFSheet sheet = workbook.createSheet("XXXX");//创建行,0表示第一行XSSFRow row = sheet.createRow(0);//创建单元格,0表示第一个单元格row.createCell(0).setCellValue("编号");row.createCell(1).setCellValue("名称");row.createCell(2).setCellValue("年龄");XSSFRow row1 = sheet.createRow(1);row1.createCell(0).setCellValue("1");row1.createCell(1).setCellValue("小明");row1.createCell(2).setCellValue("10");XSSFRow row2 = sheet.createRow(2);row2.createCell(0).setCellValue("2");row2.createCell(1).setCellValue("小王");row2.createCell(2).setCellValue("20");//通过输出流将workbook对象下载到磁盘FileOutputStream out = new FileOutputStream("D:\\itcast.xlsx");workbook.write(out);out.flush();out.close();workbook.close();
转载地址:http://cnilf.baihongyu.com/