一
所需依赖
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
java后台代码
public String uploadExcel(MultipartFile file){
//判断是否为空
if (file.isEmpty()) {
System.out.println("文件为空");
}
//获取MultipartFile 文件名
String mFileName = file.getOriginalFilename();
//获取文件后缀名
String endName = mFileName.substring(mFileName.lastIndexOf(".")+1);
if(!endName.endsWith("xlsx") && !endName.endsWith("xls")){
System.out.println("请传入正确的Excel格式文件!");
}
try {
//poi需要的是File格式的输入流,需要先将MultipartFile转为File
//上传文件存放到本地
Date now = new Date();
String fileName = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 小写的mm表示的是分钟
String dateStr = sdf.format(now);
String path = dateStr;// request.getSourceUrl();
logger.info("save path:" + path);
//获得MultipartFile的输入流
InputStream in = file.getInputStream();
byte[] bytes = new byte[in.available()];
// 将MultipartFile 文件中的内容读入到数组中
in.read(bytes);
// 文件保存位置
File saveDir = new File(path);
if (!saveDir.exists()) {
saveDir.mkdir();
}
File savefile = new File(saveDir + File.separator + fileName);
FileOutputStream fos = new FileOutputStream(savefile);
//将MultipartFile的输入流写入新创建的File文件中
fos.write(bytes);
if (fos != null) {
fos.close();
}
in.close();
FileInputStream stream = new FileInputStream(savefile);
//获得execl文件输入流
InputStream inputStream = file.getInputStream();
//获得Execl文件
Workbook wb = WorkbookFactory.create(stream);
//获取第一个工作表
Sheet readSheet = wb.getSheetAt(0);
遍历工作表
for (Row row : readSheet) {
//省略execl第一行,第一行一般为格列的标题
if(row.getRowNum()==0){
continue;
}
//获取文本
String = row.getCell(4).getStringCellValue();
//获取数字类型的列
double money = row.getCell(10).getNumericCellValue();
BigDecimal totalAchievement = new BigDecimal(money);
//获取时间类型的列,需要转换
double time = row.getCell(6).getNumericCellValue();
Date date = DateUtil.getJavaDate(time);
}
}catch (Exception e){
}
}
上面的方法流程是:首先将MultipartFile文件转换为字节数组,然后在本地新建一个File文件,再将字节数组写入file文件中,在使用poi操作file文件。
下面这种方法是网上查找到的
multipartFile就是MultipartFile类型的文件
CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) multipartFile;
FileItem fileItem = commonsMultipartFile.getFileItem();
DiskFileItem diskFileItem = (DiskFileItem) fileItem;
String absPath = diskFileItem.getStoreLocation().getAbsolutePath();
File file = new File(absPath);
但是这种方法,测试的时候会报错,暂时没有使用这个方法。