欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EXCEL文件导入相关

程序员文章站 2024-03-21 08:23:58
...

总结一下excel文件上传时对excel文件格式的判定以及根据不同版本的excel创建对应的workbook。直接上代码

package com.mrx.controller;

import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.FileMagic;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedInputStream;
import java.io.IOException;

/**
 * @author
 * @create 2020-03-17 11:48
 */
@Api(tags = "Excel测试")
@RequestMapping(value = "/api/excel")
@RestController
public class ExcelController {


    public void upload(@RequestParam("file") MultipartFile file){
        // 判断是否是Excel方法一
        isExcel1(file);

        // 判断是否是Excel方法二(推荐)
        isExcel2(file);

        // 创建工作簿
        Workbook workbook = getWorkbook(file);
    }


    /** 通过文件后缀名判断 */
    private boolean isExcel1(MultipartFile file) {
        String fileName = file.getOriginalFilename();
        if ((StringUtils.endsWithIgnoreCase(fileName,".xls")) || (StringUtils.endsWithIgnoreCase(fileName,".xlsx"))){
            return true;
        }else {
            return false;
        }
    }

    /** 使用魔法数字判断 */
    private boolean isExcel2(MultipartFile file) {
        BufferedInputStream bis = null;
        try {
            bis = new BufferedInputStream(file.getInputStream());
            FileMagic fileMagic = FileMagic.valueOf(bis);
            if ((fileMagic.equals(FileMagic.OLE2)) || (fileMagic.equals(FileMagic.OOXML))){
                return true;
            }
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }finally {
            if (bis != null){
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /** 判断excel版本创建不同的workbook */
    private Workbook getWorkbook(MultipartFile file) {
        Workbook workbook = null;
        BufferedInputStream bis = null;
        try {
            bis = new BufferedInputStream(file.getInputStream());
            // 判断是否是excel以及判断excel版本
            FileMagic fileMagic = FileMagic.valueOf(bis);
            //.xls
            if (fileMagic.equals(FileMagic.OLE2)) {
                workbook = new HSSFWorkbook(bis);
            //.xlsx
            } else if (fileMagic.equals(FileMagic.OOXML)) {
                workbook = new XSSFWorkbook(bis);
            }
        } catch (IOException e) {
            return null;
        }finally {
            if (bis != null){
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (workbook != null){
                try {
                    workbook.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return workbook;
    }

}

小尾巴~~
只要有积累,就会有进步

相关标签: JAVA poi excel