您的位置:首页 > 编程语言 > Java开发

JAVA入门之如何通过 POI 读取并修改 Excel(转载)

2017-05-12 11:02 471 查看
转载网址:http://jingyan.baidu.com/article/fdbd4277cbaccab89e3f48a3.html





 POI 就是专为JAVA准备的读取处理Excel的第三方组件。


用 POI读取 Excel +插入一条新的数据 


工具/原料

Eclipse

一个Excel文件



步骤二 : 打开 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 开始

// employees.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中文件流操作完毕后,一定及时关闭流对象!!不然,你可能会遇到很多异常不到的问题!

END






注意事项

JAVA中文件流操作完毕后,及时关闭流对象!

[b]转载网址:http://jingyan.baidu.com/article/fdbd4277cbaccab89e3f48a3.html[/b]

小note:

sheet = wb.getSheetAt(0);
row = sheet.getRow(0);
// 标题总列数
int colNum = row.getPhysicalNumberOfCells();
System.out.println("colNum:" + colNum);




其中的HSSFRow.getPhysicalNumberOfCells();这个方法是用于获取一行中存在的单元格数,POI的官方API中有给出getPhysicalNumberOfCells方法的解释


getPhysicalNumberOfCells

public int getPhysicalNumberOfCells()

gets the number of defined cells (NOT number of cells in the actual row!). That is to say if only columns 0,4,5 have values then there would be 3.
Specified by:
getPhysicalNumberOfCells
 in
interface 
Row

Returns:int representing the number of defined cells in the row.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: