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:
其中的HSSFRow.getPhysicalNumberOfCells();这个方法是用于获取一行中存在的单元格数,POI的官方API中有给出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:
interface
Returns:int representing the number of defined cells in the row.
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:
getPhysicalNumberOfCellsin
interface
Row
Returns:int representing the number of defined cells in the row.
相关文章推荐
- [Java]通过Poi包读取Excel表格
- Java中通过POI读取Excel 2003 - 2007的xls,xlsx格式
- Java通过poi组件usermodel读取Excel
- java 通过poi 读取Excel 写入sqlser mysql
- java通过poi解析Excel文件,直接读取客户端文件
- poi读取Excel时日期为数字 的解决方法 转载 2017年12月14日 10:31:14 标签:poi /excel /java 19 在使用poi解析Excel文件时,会发现,表格中的日期解析出
- JAVA:通过poi读取excel
- JAVA 通过poi 读取 本地excel(.xls,.xlsx)文件,文件中 包含图片
- java通过poi读取excel中的日期类型数据或自定义类型日期
- java POI 读取并打印Excel程序片段
- JAVA用POI读取EXCEL的例子 超简单
- Java利用POI生成Excel强制换行 (转载)
- 使用JAVA通过JXL(JExcel)动态生成Excel文件 转载至台湾某博客
- Flex通过Java读取Excel(详细流程)----Excel在客户端(DataGrid动态根据Excel生成)
- java用poi实现对word读取和修改操作
- .Flex通过Java读取Excel(详细流程)----Excel在服务器端
- Java 操作 Excel (读取Excel2007,Poi实现)
- Java如何通过URL调用远程接口并读取返回信息?
- Java如何处理EXCEL的读取