• Java实现导入Excel文件


    一.配置文件名称、路径、内容:

     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="utf-8"></property>
            <property name="maxUploadSize" value="104857600"></property><!-- 最大上传文件大小:100M -->
            <property name="maxInMemorySize" value="10240"></property>
        </bean>

    二.controller

     @RequestMapping(value = "/importAccountManager")
        @ResponseBody
        public ModelAndView importAccountManager(HttpServletRequest request, HttpServletResponse response,
                @RequestParam("file") CommonsMultipartFile file) {
            ModelAndView mav = new ModelAndView(new MappingJackson2JsonView());
            try (InputStream inputXls = file.getInputStream();
                    InputStream inputXML = new BufferedInputStream(getClass().getClassLoader().getResourceAsStream(ACCOUNT_TEMPLATE_PATH));) {
                XLSReader mainReader = ReaderBuilder.buildFromXML(inputXML);
                List<AccountManagerModel> dataList = new ArrayList<>();
                Map<String, Object> params = new HashMap<>();
                params.put("dataList", dataList);
                mainReader.read(inputXls, params);
                String message = accountManagerService.importAccountManager(dataList);
                if(StringUtils.isNotBlank(message)) {
                    mav.addObject("success", false);
                } else {
                    mav.addObject("success", true);
                }
                mav.addObject("message", message);
            } catch (Throwable e) {
                LOGGER.error("importAccountManager causes inner exception:", e);
                mav.addObject("success", false);
                mav.addObject("message", e.getMessage());
            }
            return mav;
        }

    三.service

    //serviceImpl
      @Override
        public String importAccountManager(List<AccountManagerModel> accountList) throws Exception {
            List<OrgModel> orgList = orgMapper.queryOrg();
            String message = validate(accountList, orgList);
            if(message == null) {
                for(AccountManagerModel account : accountList) {
                    String consNo = account.getConsNo();
                    AccountManagerModel oldAccount = accountManagerMapper.queryByConsNo(consNo);
                    if(oldAccount == null) {
                        insertAccountManager(account);
                    } else {
                        editAccountManager(account, oldAccount);
                    }
                }
            }
            return message;
        }
    //interface
    /**
         * 导入客户数据
         * 
         * @param accountList
         * @return
         * @throws Exception
         */
        public String importAccountManager(List<AccountManagerModel> accountList) throws Exception;

    四.mapper

    //interface 
     /**
         * 通过客户号查询企业
         * 
         * @param consNo
         * @return
         * @throws throws Exception
         */
        public AccountManagerModel queryByConsNo(String consNo) throws Exception;
    //mapper映射xml
    <select id="queryByConsNo" parameterType="java.lang.String" resultMap="AccountManagerResultMap">
            select 
                a.cons_id,
                a.cons_no,
                a.cons_name,
                a.cons_address,
                a.legal_person,
                a.legal_person_phone,
                a.bill_person,
                a.bill_person_phone,
                a.electric_person,
                a.electric_person_phone,
                a.entrusted_person,
                a.entrusted_person_phone,
                a.cons_state,
                a.org_no,
                b.org_name
           from be_cons_info a, o_org b
          where a.org_no = b.org_no
            and a.cons_no = #{consNo}
        </select>

    五.Html

    <div class="tool_wrapper">
            <button class="ui-btn ui-btn-primary" onclick="addAccountManager();">新增</button>
            <button class="ui-btn ui-btn-primary left20" onclick="editAccountManager();">修改</button>
            <!-- <button class="ui-btn ui-btn-primary left20" onclick="cancelAccountManager();">注销</button> -->
            <button class="ui-btn ui-btn-primary left20 fileinput-button">
                <span>导入Excel</span>
                <input id="fileupload" type="file" name="file" accept="application/vnd.ms-excel">
            </button>
            <button class="ui-btn ui-btn-primary left20" onclick="exportXls()">导出Excel</button>
            <button class="ui-btn ui-btn-primary left20" onclick="downloadXlsTemplate()">下载模板</button>
        </div>

    六.js

    function bindFileUploadEvent() {
        $('#fileupload').fileupload({
            url: basePath + 'accountManager/importAccountManager',
            type: 'post',
            dataType: 'json',
            beforeSend: function(xhr){
                xhr.setRequestHeader(header, token);
            },
            send: function(e, data) {
                var file = data.files[0];
                var fileName = file.name;
                var fileSize = file.size;
                var errorMsg = "请选择Excel文件!";
                var pass = validateFileName(fileName, ".xls");
                if(pass && fileSize >= 10485760) {
                    pass = false;
                    errorMsg = "选择的Excel文件须小于10M!";
                }
                if(!pass) {
                    $('#fileupload').val('');
                    errorDialog(errorMsg);
                } else {
                    if(parent.progress) {
                        parent.progress.show();
                    }
                }
                return pass;
            },
            done: function(e, data) {
                var result = data.result;
                if(result.success) {
                    queryAccountManager();
                    succDialog("客户数据导入成功!");
                } else {
                    errorDialog(result.message);
                }
            },
            fail: function(e, data) {
                if(data.textStatus != null) {
                    errorDialog("系统发生故障,请联系系统管理员或稍后重试!");
                }
            },
            always: function(e, data) {
                if(parent.progress) {
                    parent.progress.hide();
                }
            }
        });
    }
  • 相关阅读:
    jquery 读取 xml 属性等于某值的 方法
    jquery 定时器
    jquery div 滚动条 最底部
    ajax success 不能返回值解决方案 async:false
    wiki 使用说明
    thinkphp 二维码封装函数
    100本书 慢慢来读
    2013 来了
    jquery 解析 xml
    键盘按键 事件
  • 原文地址:https://www.cnblogs.com/dslnn/p/10330172.html
Copyright © 2020-2023  润新知