zoukankan      html  css  js  c++  java
  • bootstrap-fileinput + poi 导入Excel完整示例(包含前端后端和失败处理)

    1. 首先到官网把插件下载下来

    git clone https://github.com/kartik-v/bootstrap-fileinput.git
    

    2. 将文件导入到工程,在前端页面将插件引入

    <link rel="stylesheet" href="${basePath}/resources/plugs/bootstrap-fileinput/css/fileinput.min.css"/>
    <script src="${basePath}/resources/plugs/bootstrap-fileinput/js/fileinput.min.js"></script>
    <script src="${basePath}/resources/plugs/bootstrap-fileinput/js/locales/zh.js"></script>
    

     3. 导入界面

    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
            <li class="fa fa-remove"></li>
        </button>
        <h5 class="modal-title">Excel文件上传</h5>
    </div>
    <div class="modal-body">
        <form id="importFile" name="importFile" class="form-horizontal" method="post"
              enctype="multipart/form-data">
            <div class="box-body">
                <div>
                    <label class="control-label">请选择要导入的Excel文件:</label>
                    <input id="excelFile" name="excelFile" class="file-loading" type="file" multiple accept=".xls,.xlsx"
                           > <br>
                </div>
            </div>
        </form>
    </div>
    

    4. js处理

    <script>
        initUpload("excelFile", basePath + "/test/upload");
        function initUpload(ctrlName, uploadUrl) {
            var control = $('#' + ctrlName);
            control.fileinput({
                language: 'zh', //设置语言
                uploadUrl: uploadUrl, //上传的地址
                uploadAsync: true, //默认异步上传
                showCaption: true,//是否显示标题
                showUpload: true, //是否显示上传按钮
                browseClass: "btn btn-primary", //按钮样式
                allowedFileExtensions: ["xls", "xlsx"], //接收的文件后缀
                maxFileCount: 10,//最大上传文件数限制
                previewFileIcon: '<i class="glyphicon glyphicon-file"></i>',
                showPreview: true, //是否显示预览
                previewFileIconSettings: {
                    'docx': '<i ass="fa fa-file-word-o text-primary"></i>',
                    'xlsx': '<i class="fa fa-file-excel-o text-success"></i>',
                    'xls': '<i class="fa fa-file-excel-o text-success"></i>',
                    'pptx': '<i class="fa fa-file-powerpoint-o text-danger"></i>',
                    'jpg': '<i class="fa fa-file-photo-o text-warning"></i>',
                    'pdf': '<i class="fa fa-file-archive-o text-muted"></i>',
                    'zip': '<i class="fa fa-file-archive-o text-muted"></i>',
                },
                uploadExtraData: function () {
                    var extraValue = "test";
                    return {"excelType": extraValue};
                }
            });
        }
        $("#excelFile").on("fileuploaded", function (event, data, previewId, index) {
            console.log(data);
            if(data.response.success == true)
            {
                alert(data.files[index].name + "上传成功!");
    	    //关闭
                $(".close").click();
            }
            else{
                alert(data.files[index].name + "上传失败!" + data.response.message);
    	    //重置
    	    $("#excelFile").fileinput("clear");
    	    $("#excelFile").fileinput("reset");
    	    $('#excelFile').fileinput('refresh');
    	    $('#excelFile').fileinput('enable');
            }
        });
    </script>
    

    5.  后台接口

       @RequestMapping(value = "/upload", method = RequestMethod.POST)
        @ResponseBody
        private Result importExcel(@RequestParam(value = "excelFile", required = false) MultipartFile file,HttpServletRequest request) {
            try {
                MultipartRequest multipartRequest=(MultipartRequest) request;
                MultipartFile excelFile=multipartRequest.getFile("excelFile");
                if(excelFile!=null){
                    List<List<String>> datas = ExcelUtil.readXls(excelFile.getInputStream());
    		//TODO: 读到的数据都在datas里面,根据实际业务逻辑做相应处理
    // ............. if(datas!=null && datas.size()>0){ return new Result(true); } }else{ return new Result(false); } } catch (Exception e) { return new Result(false,e.getMessage()); } return new Result(false); }

    6. 附ExcelUtil类

    package com.cnpc.framework.util;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class ExcelUtil {
        public static List<List<String>> readXlsx(String path) throws IOException {
            InputStream input = new FileInputStream(path);
            return readXlsx(input);
        }
    
        public static List<List<String>> readXls(String path) throws IOException {
            InputStream input = new FileInputStream(path);
            return readXls(input);
        }
    
        public static List<List<String>> readXlsx(InputStream input) throws IOException {
            List<List<String>> result = new ArrayList<List<String>>();
            XSSFWorkbook workbook = new XSSFWorkbook(input);
            for (XSSFSheet xssfSheet : workbook) {
                if (xssfSheet == null) {
                    continue;
                }
                for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
                    XSSFRow row = xssfSheet.getRow(rowNum);
                    int minCellNum = row.getFirstCellNum();
                    int maxCellNum = row.getLastCellNum();
                    List<String> rowList = new ArrayList<String>();
                    for (int i = minCellNum; i < maxCellNum; i++) {
                        XSSFCell cell = row.getCell(i);
                        if (cell == null) {
                            continue;
                        }
                        rowList.add(cell.toString());
                    }
                    result.add(rowList);
                }
            }
            return result;
        }
    
        public static List<List<String>> readXls(InputStream input) throws IOException {
            List<List<String>> result = new ArrayList<List<String>>();
            HSSFWorkbook workbook = new HSSFWorkbook(input);
            for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
                HSSFSheet sheet = workbook.getSheetAt(numSheet);
                if (sheet == null) {
                    continue;
                }
                for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
                    HSSFRow row = sheet.getRow(rowNum);
                    int minCellNum = row.getFirstCellNum();
                    int maxCellNum = row.getLastCellNum();
                    List<String> rowList = new ArrayList<String>();
                    for (int i = minCellNum; i < maxCellNum; i++) {
                        HSSFCell cell = row.getCell(i);
                        if (cell == null) {
                            continue;
                        }
                        rowList.add(getStringVal(cell));
                    }
                    result.add(rowList);
                }
            }
            return result;
        }
    
        private static String getStringVal(HSSFCell cell) {
            switch (cell.getCellType()) {
                case Cell.CELL_TYPE_BOOLEAN:
                    return cell.getBooleanCellValue() ? "TRUE" : "FALSE";
                case Cell.CELL_TYPE_FORMULA:
                    return cell.getCellFormula();
                case Cell.CELL_TYPE_NUMERIC:
                    cell.setCellType(Cell.CELL_TYPE_STRING);
                    return cell.getStringCellValue();
                case Cell.CELL_TYPE_STRING:
                    return cell.getStringCellValue();
                default:
                    return null;
            }
        }
    
    }
    

      

    
    

      

  • 相关阅读:
    Vue 项目目录结构分析
    Vue 项目环境搭建
    Vue 组件
    Vue 指令
    Vue 实例成员
    Django 静态文件
    MySQL 索引详解
    Django 请求生命周期
    18. 4Sum (JAVA)
    16. 3Sum Closest (JAVA)
  • 原文地址:https://www.cnblogs.com/zhaohz/p/7259128.html
Copyright © 2011-2022 走看看