热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

springboot实现上传并解析Excel过程解析

这篇文章主要介绍了springboot实现上传并解析Excel过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

添加pom依赖





  org.apache.poi
  poi
  3.16



  org.apache.poi
  poi-ooxml
  3.16

在springboot中配置MultipartResolver

//配置文件上传
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver() {
  CommonsMultipartResolver resolver = new CommonsMultipartResolver();
  resolver.setDefaultEncoding("UTF-8");
  // resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
  resolver.setResolveLazily(true);
  resolver.setMaxInMemorySize(40960);
  // 上传文件大小 5G
  resolver.setMaxUploadSize(5 * 1024 * 1024 * 1024);
  return resolver;
}

Excel解析工具类

package com.sanyu.tender.util.excelAnalysis;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.ArrayList;
/**
 * @Author:huang
 * @Date:2019-09-10 10:29
 * @Description:excel文件解析类
 */
public class Analysis {
  public Analysis() {
    throw new Error("工具类不允许实例化!");
  }
  /**
   * 获取并解析excel文件,返回一个二维集合
   * @param file 上传的文件
   * @return 二维集合(第一重集合为行,第二重集合为列,每一行包含该行的列集合,列集合包含该行的全部单元格的值)
   */
  public static ArrayList> analysis(MultipartFile file) {
    ArrayList> row = new ArrayList<>();
    //获取文件名称
    String fileName = file.getOriginalFilename();
    System.out.println(fileName);

    try {
      //获取输入流
      InputStream in = file.getInputStream();
      //判断excel版本
      Workbook workbook = null;
      if (judegExcelEdition(fileName)) {
        workbook = new XSSFWorkbook(in);
      } else {
        workbook = new HSSFWorkbook(in);
      }

      //获取第一张工作表
      Sheet sheet = workbook.getSheetAt(0);
      //从第二行开始获取
      for (int i = 1; i  cell = new ArrayList<>();
        for (int j = 0; j 

前台和controller层代码

html:

js:

/*判断文件类型*/
function isExcel(){
  var fileInput = document.getElementById("input-file").value;
  //判断文件是否为空
  if (fileInput == null || fileInput.trim() == ''){
    //layer.msg('请上传文件!');
    return false;
  }else {
    //判断文件是否为excel文件
    var reg =/^.*\.(&#63;:xls|xlsx)$/;
    if (!reg.test(fileInput)){
      //layer.msg('请上传Excel文件!');
      return false;
    }else {
      return true;
    }
  }
}
/*文件上传*/
function uplaodFile() {
  //当文件符合标准的时候才上传
  if (isExcel()){
    //将上传组件添加进临时表单
    var form = new FormData();
    form.append("file", document.getElementById("input-file").files[0]);
    //提交表单
    $.ajax({
      url: "http://localhost:8080/upload",
      data: form,
      cache: false,
      async: false,
      type: "POST",
      dataType: 'json',
      processData: false,
      contentType: false,
      success: function (data) {
        var status = data["status"]
        if(status == "success"){
          alert("解析成功!");
        }else {
          alert("解析失败!");
        }
      },
      error: function (err) {
        console.log(err);
        alert("上传失败!");
      }
    });
  }
}

controller

package com.sanyu.tender.controller.util;
import com.sanyu.tender.util.excelAnalysis.Analysis;
import javafx.scene.control.Alert;
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.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author:huang
 * @Date:2019-09-09 18:41
 * @Description:<描述>
 */
@Controller
public class ImportFileController {
  //接受文件上传
  @RequestMapping("/upload")
  @ResponseBody
  public Map uploadFile(MultipartFile file){
    Map map = new HashMap<>(16);
    //解析excel文件
    List> row = Analysis.analysis(file);
    //打印信息
    for (int i = 0;i cell = row.get(i);
      for (int j = 0;j

测试

准备导入的excel文件

运行后的控制台打印的数据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文详细介绍了跨站脚本攻击(XSS)的基本概念、工作原理,并通过实际案例演示如何构建XSS漏洞的测试环境,以及探讨了XSS攻击的不同形式和防御策略。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 在本周的白板演练中,Apache Flink 的 PMC 成员及数据工匠首席技术官 Stephan Ewen 深入探讨了如何利用保存点功能进行流处理中的数据重新处理、错误修复、系统升级和 A/B 测试。本文将详细解释保存点的工作原理及其应用场景。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
author-avatar
手机用户2502923697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有