SpringBoot导入导出Excel到Mysql

SpringBoot导入导出Excel到Mysql

2018.11.11 10:44:52字数 96阅读 1320

一、包的引用

除了引用SpringBoot基本包之外,还需要引入对Excel操作的包,如下:
<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
         此版本需高于3.17,等于也行吧-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

二、Excel工具包及实体所需bean定义

  1. 工具类
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.CharUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ExcelUtils {

        private final static Logger log = LoggerFactory.getLogger(ExcelUtils.class);

        private final static String EXCEL2003 = "xls";
        private final static String EXCEL2007 = "xlsx";

    /**
     * 读取Excel文件
     * @param path
     * @param cls
     * @param file
     * @param <T>
     * @return
     */
        public static <T> List<T> readExcel(String path, Class<T> cls,MultipartFile file){

            String fileName = file.getOriginalFilename();
            //jx
            if("".equals(fileName)){
                fileName = file.getName();
            }
            if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
                log.error("上传文件格式不正确");
            }
            List<T> dataList = new ArrayList<>();
            //03,07两种文档方式实现下面这个接口
            Workbook workbook = null;
            try {
                InputStream is