导入poi所需的包
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<!-- 导入xlsx文件时所需包 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
如果导入的是.xls文件只需导入poi包即可,poi-ooxml是导入.xlsx文件时需要的包,如果两个包都要用最好两个包的版本一样。
导入excel有两种方法:
首先说一下 .xls 和 .xlsx分开导入文件时的方法
public void importStore(MultipartFile file)throws IOException{
String fileName = file.getOriginalFilename();
//文件名后缀
String suffix = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
throw new BusinessException("文件格式不正确");
}
//如果文件名后缀为xls
if(suffix.equals("xls")){
//创建HSSFWorkbook对象
HSSFWorkbook workbook = new HSSFWorkbook(new POIFSFileSystem(file.getInputStream()));
//获取有多少个sheet
int sheetNum = workbook.getNumberOfSheets();
for (int i = 0; i < sheetNum; i++) {
//
HSSFSheet sheet = workbook.getSheetAt(i);
//获取sheet中一共有多少行
int rowNum = sheet.getPhysicalNumberOfRows();
for (int j = 0; j < rowNum; j++) {
//获取行对象
HSSFRow row = sheet.getRow(j);
//第一行是表头,跳过
if(j == 0){
continue;
}
...
// //获取行对象的单元格数量
// int cellNum = row.getPhysicalNumberOfCells();
// for (int k = 0; k < cellNum; k++) {
// HSSFCell cell = row.getCell(k);
// System.out.println("----------"+cell);
//
// }
}
}
}
//如果文件名后缀为xlsx
if(suffix.equals("xlsx")){
System.out.println("come on");
//创建XSSFWorkbook对象
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
//获取sheet页数
int sheetNum = workbook.getNumberOfSheets();
for (int i = 0; i < sheetNum; i++) {
//获取XSSFSheet对象
XSSFSheet sheet = workbook.getSheetAt(i);
//获取sheet中一共有多少行
int rowNum = sheet.getPhysicalNumberOfRows();
for (int j = 0; j < rowNum; j++) {
//获取行对象
XSSFRow row = sheet.getRow(j);
if(j == 0){
continue;
}
//获取一行有多少个单元格
int cells = row.getPhysicalNumberOfCells();
for (int k = 0; k < cells; k++) {
//获取值
String value = row.getCell(k).getStringCellValue();
}
}
}
}
}
以下这个方法不用区分文件后缀名
public void testImport(MultipartFile file) throws IOException, EncryptedDocumentException, InvalidFormatException{
//获取文件名称
String fileName = file.getOriginalFilename();
//文件名后缀
String suffix = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
throw new BusinessException("文件格式不正确");
}
//使用workbook 就不用区分.xls和.xlsx文件
//创建Workbook对象
Workbook workbook = WorkbookFactory.create(file.getInputStream());
//获取sheet页数
int sheetNum = workbook.getNumberOfSheets();
//循环sheet页
for (int i = 0; i < sheetNum; i++) {
//获取sheet对象
Sheet sheet = workbook.getSheetAt(i);
//获取sheet里的行数
int rowNum = sheet.getPhysicalNumberOfRows();
//循环行数
for (int j = 0; j < rowNum; j++) {
//获取row对象
Row row = sheet.getRow(j);
//获取一行有多少个单元格
int cells = row.getPhysicalNumberOfCells();
for (int k = 0; k < cells; k++) {
//获取值
String value = row.getCell(k).getStringCellValue();
}
}
}
}
HSSFWorkbook是导入.xls文件时用到的对象,
XSSFWorkbook是导入.xlsx文件时用到的对象,可以看到这两个对象都实现了Workbook这个接口,所以我们在导入excel文档的时候可以直接用第二种方法。