【java】excel文件上传处理解析

文件上传

使用Element-UI上传文件控件(可以限制文件类型、文件大小等,选中多个文件上传时,该控件会将多个文件拆成多次请求到后台,每次请求是一个文件)

<template>
  <div class="app-container" align="center">

    <el-upload
      class="upload-demo"
      action="/gyProj/hahaha"
      :on-preview="handlePreview"
      :on-remove="handleRemove"
      :before-remove="beforeRemove"
      multiple
      :file-list="fileList">
      <el-button size="small" type="primary">点击上传</el-button>
      <div slot="tip" class="el-upload__tip">excel文件上传</div>
    </el-upload>

  </div>
</template>
<script>

export default {
  name: 'excel-imp',
  data() {
    return {
      fileList:[]
    }
  },
  created() {

  },
  methods: {

  }
}
</script>

<style type="text/css" scoped>


</style>

需要导入依赖:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

可配置文件上传大小限制(下面是yml配置):

spring:
    servlet:  
      multipart:  
        max-file-size: 10MB  //单个文件大小限制
        max-request-size: 100MB  //单次请求大小限制
        enabled: true

后台接收

使用MultipartFile类型接收该文件

@RequestParam("file") MultipartFile file

类型转化

接收后将该类型文件转化为流,然后使用excel解析类转化,其中:

  • xlsx类型的表格:

    Workbook wb = new XSSFWorkbook(fi);
    
    依赖:
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.0.0</version>
    </dependency>
    
  • 普通类型的表格(xls):

    Workbook wb = new HSSFWorkbook(fi);
    
    依赖:
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.0.0</version>
    </dependency>
    

sheet获取

一个excel可能包含多个sheet,所以要获取各个sheet。

//获取第一个sheet对象
Sheet sheet = wb.getSheetAt(0);

之后根据获取的对象解析即可