1.导入pom文件相关jar
<!--APACHE POI-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.11</version>
</dependency>
2.测试读取Excel数据
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx
/**
* 测试POI框架读取Eexel文件
*/
@Test
public void test() throws Exception {
FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Administrator\\Desktop\\test.xls");
// HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls
// XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx
//1.读取Excel文档对象
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fileInputStream);
//2.获取要解析的表格(第一个表格)
HSSFSheet sheet = hssfWorkbook.getSheetAt(0);
//获得最后一行的行号
int lastRowNum = sheet.getLastRowNum();
for (int i = 0; i <= lastRowNum; i++) {//遍历每一行
//3.获得要解析的行
HSSFRow row = sheet.getRow(i);
//4.获得每个单元格中的内容(String)
row.getCell(0).setCellType(Cell.CELL_TYPE_STRING);
row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
String stringCellValue0 = row.getCell(0).getStringCellValue();
String stringCellValue1 = row.getCell(1).getStringCellValue();
String stringCellValue2 = row.getCell(2).getStringCellValue();
String stringCellValue3 = row.getCell(3).getStringCellValue();
System.out.println(stringCellValue0 + "--" + stringCellValue1 + "--" + stringCellValue2 + "--" + stringCellValue3);
}
}
解析结果:
如果读取Excel表格时出现错误
Cannot get a text value from a numeric cell
解决办法:在getStringCellValue()之前,需要set一下cell的type。
也就是在读取数据之前需要setCellType(Cell.CELL_TYPE_STRING);把NUMERICI的类型转换为STRING就不会有错误了。
3.测试导入Excel数据
/**
* POI导入数据到Excel
*/
@Test
public void test2() throws Exception {
//创建HSSFWorkbook对象(excel的文档对象)
Workbook wb = new XSSFWorkbook();
//建立新的sheet对象(excel的表单)
Sheet sheet=wb.createSheet("OnePage");
//在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
Row row1=sheet.createRow(0);
//创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
Cell cell=row1.createCell(0);
//设置单元格内容
cell.setCellValue("基本信息表");
//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0,0,0,6));
//在sheet里创建第二行
Row row2=sheet.createRow(1);
//创建单元格并设置单元格内容
row2.createCell(0).setCellValue("ID");
row2.createCell(1).setCellValue("更新时间");
row2.createCell(2).setCellValue("求职状态");
row2.createCell(3).setCellValue("性别");
row2.createCell(4).setCellValue("年龄");
row2.createCell(5).setCellValue("生日");
row2.createCell(6).setCellValue("地址");
row2.createCell(7).setCellValue("工作经验");
row2.createCell(8).setCellValue("项目经验");
row2.createCell(9).setCellValue("自我评价");
//第2行开始写入5行数据
for (int i = 2; i < 5; i++) {
Row row3=sheet.createRow(i);
row3.createCell(0).setCellValue("1");
row3.createCell(1).setCellValue("2020");
row3.createCell(2).setCellValue("五");
row3.createCell(3).setCellValue("男");
}
FileOutputStream output=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.xls");
wb.write(output);//写入磁盘
output.close();
}
执行结果