JAVA入门之如何通过 POI 读取并修改 Excel
1、步骤一 :新建工程和类,并将 POI 组件(jar 包的形式) 导入到工程中,并准备一个 Excel 文件, 放置在 D 盘根目录。POI 组件相关的 jar 包大家可以百度搜索下载也可以在截图所示云盘中下载。关于如何将第三方jar包导入到工程中,大家可以参考如下经验。
2、步骤二 : 打开 Excel 文件,获取表格信息我们通过如下代码就可以打开一个 Excel 文件 :// 创建 Excel 文件的输入流对象FileInputStream excelFileInputStream = new FileInputStream("D:/employees.xlsx"); // XSSFWorkbook 就代表一个 Excel 文件// 创建其对象,就打开这个 Excel 文件 XSSFWorkbook workbook = new XSSFWorkbook(excelFileInputStream);// 输入流使用后,及时关闭!这是文件流操作中极好的一个习惯! excelFileInputStream.close(); // XSSFSheet 代表 Excel 文件中的一张表格 // 我们通过 getSheetAt(0) 指定表格索引来获取对应表格// 注意表格索引从 0 开始! XSSFSheet sheet = workbook.getSheetAt(0);
3、步骤三 : 循环读取表格并输出其内容// 开始循环表格数据,表格的行索引从 0 开始 // e罪焐芡拂mployees.xlsx 第一行是标题行,我们从第二行开始, 对应的行索引是 1 // sheet.getLastRowNum() : 获取当前表格中最后一行数据对应的行索引 for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) { // XSSFRow 代表一行数据 XSSFRow row = sheet.getRow(rowIndex); if (row == null) { continue; } XSSFCell nameCell = row.getCell(0); // 姓名列 XSSFCell genderCell = row.getCell(1); // 性别列 XSSFCell ageCell = row.getCell(2); // 年龄列 XSSFCell weightCell = row.getCell(3); // 体重列 XSSFCell salaryCell = row.getCell(4); // 收入列 StringBuilder employeeInfoBuilder = new StringBuilder(); employeeInfoBuilder.append("员工信息 --> ") .append("姓名 : ").append(nameCell.getStringCellValue()) .append(" , 性别 : ").append(genderCell.getStringCellValue()) .append(" , 年龄 : ").append(ageCell.getNumericCellValue()) .append(" , 体重(千克) : ").append(weightCell.getNumericCellValue()) .append(" , 月收入(元) : ").append(salaryCell.getNumericCellValue()); System.out.println(employeeInfoBuilder.toString()); } // 操作完毕后,记得要将打开的 XSSFWorkbook 关闭 workbook.close(); (注意:所有操作完毕后,统一关闭,如果后面还有关于这个Excel文件的操作,这里先不关闭,但所有操作完成后,一定记得关闭对象!)
4、步骤四 : 向 Excel文件最后插入一条新数据,首先要创建一行数据// -颍骈城茇----- 创建一行新的数据 ----------// // 指定行索引,创建一行数据, 行索引为当前最后一行的行索引 + 1 int currentLastRowIndex = sheet.getLastRowNum(); int newRowIndex = currentLastRowIndex + 1;XSSFRow newRow = sheet.createRow(newRowIndex);// 开始创建并设置该行每一单元格的信息,该行单元格的索引从 0 开始int cellIndex = 0;// 创建一个单元格,设置其内的数据格式为字符串,并填充内容,其余单元格类同XSSFCell newNameCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_STRING);newNameCell.setCellValue("钱七");XSSFCell newGenderCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_STRING);newGenderCell.setCellValue("女");XSSFCell newAgeCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);newAgeCell.setCellValue(50);XSSFCell newWeightCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);newWeightCell.setCellValue(68);XSSFCell newSalaryCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);newSalaryCell.setCellValue(6000);
5、步骤五 : 将最新的 Excel 内容写回到原始 Excel 文件中// 将最新的 Excel 数据写回到原始 Excel 文件(就是D盘那个 Excel 文件)中 // 首先要创建一个原始Excel文件的输出流对象! FileOutputStream excelFileOutPutStream = new FileOutputStream("D:/employees.xlsx"); // 将最新的 Excel 文件写入到文件输出流中,更新文件信息!workbook.write(excelFileOutPutStream);// 执行 flush 操作, 将缓存区内的信息更新到文件上excelFileOutPutStream.flush();// 使用后,及时关闭这个输出流对象, 好习惯,再强调一遍!excelFileOutPutStream.close();
6、步骤六 : 总结POI 是JAVA处理Excel的利器,关于其更多的知识,大家可以百度搜索 POI,到其官网(Apache POI)进行学习!!工程代码,大家有兴趣可以到截图所示云盘中查看。最后再强调一遍 : JAVA中文件流操作完毕后,一定及时关闭流对象!!不然,你可能会遇到很多异常不到的问题!