java解析前端js传递的Excel文件,含前后端代码

编程思路:

  1. 前端input读取xls、xlsx的Excel文件;
  2. 使用js的formData封装文件和其他数据;
  3. 使用ajax请求发送到后台,注意:contentType和processData要设置成false;
  4. 后台使用MultipartFile接收文件,使用Workbook、Sheet、Row、Cell解析Excel;
  5. 使用ArrayList>接收数据,解析完毕。

引入依赖




	com.fasterxml.jackson.core
	jackson-databind
	2.9.10





	org.apache.poi
	poi
	4.0.0





	org.apache.poi
	poi-ooxml
	4.0.0

前端页面




    
    Excel
    


    


注意:"contentType:false"和"processData:false"绝对不能少,不然会无法传递文件

后台java解析代码

package com.example.demo.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description TODO
 * @Author wangs
 * @Date 2019/12/311:16
 */
@Controller
@RequestMapping("/index/")
public class IndexController {

    @RequestMapping("toExcelPage")
    public String toExcelPage(){
        return "web/excel";
    }

    @RequestMapping("analysisExcel")
    @ResponseBody
    public String analysisExcel(MultipartFile file,String str,String array){ //注意和前端名字保持一致

        ObjectMapper objectMapper =new ObjectMapper();
        String nativeStr =str; //获取字符串

        try {
            List arrayList =(List)objectMapper.readValue(array, List.class);  //读取前端数组存在list中

            InputStream inputStream =file.getInputStream();//获取前端传递过来的文件对象,存储在“inputStream”中
            String fileName = file.getOriginalFilename();//获取文件名

            Workbook workbook =null; //用于存储解析后的Excel文件

            //判断文件扩展名为“.xls还是xlsx的Excel文件”,因为不同扩展名的Excel所用到的解析方法不同
            String fileType = fileName.substring(fileName.lastIndexOf("."));
            if(".xls".equals(fileType)){
                workbook= new HSSFWorkbook(inputStream);//HSSFWorkbook专门解析.xls文件
            }else if(".xlsx".equals(fileType)){
                workbook = new XSSFWorkbook(inputStream);//XSSFWorkbook专门解析.xlsx文件
            }

            ArrayList>list =new ArrayList<>();

            Sheet sheet; //工作表
            Row row;      //行
            Cell cell;    //单元格

            //循环遍历,获取数据
            for(int i=0;i

进入页面,选择文件,点击提交

java解析前端js传递的Excel文件,含前后端代码_第1张图片

Excel中的的内容:

java解析前端js传递的Excel文件,含前后端代码_第2张图片

后台解析结果

java解析前端js传递的Excel文件,含前后端代码_第3张图片

成功!

你可能感兴趣的:(java,后台,js/jquery)