spring-excel-导入

1js

/**
 * 导入window
 */
Ext.define(‘ppData.priceApplyIndex.priceApplyIndexWinUpload‘, {
    extend: ‘Ext.window.Window‘,
    title:‘资源上传‘,
    width:400,
    height:200,
    id :null,
    minWidth:300,
    minHeight:100,
    closeAction : ‘hide‘,
    layout:‘fit‘,
    plain:true,
    bodyStyle:‘padding:5px;‘,
    buttonAlign:‘center‘,
    formUpload:null,//上传form
    getFormUpload:function(){
        if(Ext.isEmpty(this.formUpload)){
            this.formUpload = Ext.create(‘ppData.priceApplyIndex.priceApplyIndexFormUpload‘);
        }
        return this.formUpload;
    },
    overlapErrorMessageWindow : null,
    getOverlapErrorMessageWindow : function(){
        this.overlapErrorMessageWindow = Ext.create(‘ppData.priceApplyIndex.OverlapErrorMessageWindow‘);
        return this.overlapErrorMessageWindow;
    },
    initComponent: function() {
        var me = this;
        var formUpload = me.getFormUpload();
        me.items=[formUpload];
        me.buttons = [{
              text: ‘上 传‘,
              handler: function() {
                      var parm=‘‘;
                    if(!Ext.isEmpty(me.id)){
                        parm=‘?id=‘+me.id;
                    }
                if(formUpload.form.isValid()){
                     formUpload.getForm().submit({
                        url:‘../pp/importPpPrice.do‘+parm,
                        waitMsg:‘正在导入数据,请稍候。。。‘,
                        waitTitle:‘提示‘,
                        success: function(form, action){
                           Ext.ux.Toast.msg("提示", "导入成功");
                           me.close();
                        },
                        failure: function(form, action){
                            var json = Ext.decode(action.response.responseText);
                            Ext.ux.Toast.msg("提示", json.msg, ‘error‘);
                        },
                          exception : function(from, action) {
                                me.close();
                                try{
                                    var json = Ext.decode(action.response.responseText);
                                    if(json.success){
                                        me.close();
                                        Ext.ux.Toast.msg("提示", json.msg, ‘success‘);
                                        if(json.success){
                                            var selectResultPanel = Ext.getCmp("ppData.priceApplyIndex.activityDiscountPageElementGridPanel");
                                            selectResultPanel.getPagingToolbar().moveFirst();
                                        }

                                    }else{
                                        // 弹窗展示错误消息
                                        var overlapErrorMessageWindow  = me.getOverlapErrorMessageWindow();
                                        var overlapErrorMessageForm = overlapErrorMessageWindow.getOverlapErrorMessageForm();
                                        // 设置错误消息
                                        overlapErrorMessageForm.getForm().findField("errorMessage").setValue(json.msg);
                                        overlapErrorMessageWindow.show();
                                    }
                                }catch(err){
                                    Ext.ux.Toast.msg(‘提示‘, err, ‘error‘);
                                }

                            }
                    });
                }
              }
            },{
              text: ‘取 消‘,
              handler:function(){
              me.hide();
              }
            }];
        me.callParent();
    }
});
/**
 * 导入文件from
 */
Ext.define(‘ppData.priceApplyIndex.priceApplyIndexFormUpload‘, {
    extend:‘Ext.form.FormPanel‘,
    items: [{
        xtype: ‘filefield‘,
        emptyText: ‘请选择文件‘,
        fieldLabel: ‘报价导入‘,
        buttonText: ‘浏览‘,
        allowBlank:false,
        name : ‘file‘,
        validator: function(value){
        var arr = value.split(‘.‘);
                if(arr[arr.length-1] != ‘xlsx‘){
                  return ‘文件不合法,必须是.xlsx后缀结尾‘;
                }else{
                  return true;
                }

        },
        buttonConfig: {
            iconCls: ‘upload-icon‘
        }
    }]
});   

/**
 * 导入window(送货费)
 */
Ext.define(‘ppData.priceApplyIndex.priceApplyIndexWinUploadDeliveryFee‘, {
    extend: ‘Ext.window.Window‘,
    title:‘资源上传‘,
    width:400,
    height:200,
    id :null,
    minWidth:300,
    minHeight:100,
    closeAction : ‘hide‘,
    layout:‘fit‘,
    plain:true,
    bodyStyle:‘padding:5px;‘,
    buttonAlign:‘center‘,
    formUpload:null,//上传form
    getFormUpload:function(){
        if(Ext.isEmpty(this.formUpload)){
            this.formUpload = Ext.create(‘ppData.priceApplyIndex.priceApplyIndexFormUploadDeliveryFee‘);
        }
        return this.formUpload;
    },
    overlapErrorMessageWindow : null,
    getOverlapErrorMessageWindow : function(){
        this.overlapErrorMessageWindow = Ext.create(‘ppData.priceApplyIndex.OverlapErrorMessageWindow‘);
        return this.overlapErrorMessageWindow;
    },
    initComponent: function() {
        var me = this;
        var formUpload = me.getFormUpload();
        me.items=[formUpload];
        me.buttons = [{
              text: ‘上 传‘,
              handler: function() {
                    var parm=‘‘;
                    if(!Ext.isEmpty(me.id)){
                        parm=‘?id=‘+me.id;
                    }
                if(formUpload.form.isValid()){
                     formUpload.getForm().submit({
                        url:‘../pp/importPpDeliveryFee.do‘+parm,
                        waitMsg:‘正在导入数据,请稍候。。。‘,
                        waitTitle:‘提示‘,
                        success: function(form, action){
                           Ext.ux.Toast.msg("提示", "导入成功");
                           me.close();
                        },
                        failure: function(form, action){
                            var json = Ext.decode(action.response.responseText);
                            Ext.ux.Toast.msg("提示", json.msg, ‘error‘);
                        },
                          exception : function(from, action) {
                                me.close();
                                try{
                                    var json = Ext.decode(action.response.responseText);
                                    if(json.success){
                                        me.close();
                                        Ext.ux.Toast.msg("提示", json.msg, ‘success‘);
                                        if(json.success){
                                            var selectResultPanel = Ext.getCmp("ppData.priceApplyIndex.activityDiscountPageElementGridPanel");
                                            selectResultPanel.getPagingToolbar().moveFirst();
                                        }

                                    }else{
                                        // 弹窗展示错误消息
                                        var overlapErrorMessageWindow  = me.getOverlapErrorMessageWindow();
                                        var overlapErrorMessageForm = overlapErrorMessageWindow.getOverlapErrorMessageForm();
                                        // 设置错误消息
                                        overlapErrorMessageForm.getForm().findField("errorMessage").setValue(json.msg);
                                        overlapErrorMessageWindow.show();
                                    }
                                }catch(err){
                                    Ext.ux.Toast.msg(‘提示‘, err, ‘error‘);
                                }

                            }
                    });
                }
              }
            },{
              text: ‘取 消‘,
              handler:function(){
              me.hide();
              }
            }];
        me.callParent();
    }
});
/**
 * 导入文件from(送货费)
 */
Ext.define(‘ppData.priceApplyIndex.priceApplyIndexFormUploadDeliveryFee‘, {
    extend:‘Ext.form.FormPanel‘,
    items: [{
        xtype: ‘filefield‘,
        emptyText: ‘请选择文件‘,
        fieldLabel: ‘送货费导入‘,
        buttonText: ‘浏览‘,
        allowBlank:false,
        name : ‘file‘,
        validator: function(value){
        var arr = value.split(‘.‘);
                if(arr[arr.length-1] != ‘xlsx‘){
                  return ‘文件不合法,必须是.xlsx后缀结尾‘;
                }else{
                  return true;
                }

        },
        buttonConfig: {
            iconCls: ‘upload-icon‘
        }
    }]
});   

/**
 * 错误消息Window
 */
Ext.define(‘ppData.priceApplyIndex.OverlapErrorMessageWindow‘, {
    extend: ‘Ext.window.Window‘,
    title:‘错误消息‘,
    width:400,
    height:320,
    minWidth:300,
    minHeight:100,
    layout:‘fit‘,
    plain:true,
    bodyStyle:‘padding:5px;‘,
    closeAction: ‘destroy‘,
    overlapErrorMessageForm:null,
    getOverlapErrorMessageForm:function(){
        if(Ext.isEmpty(this.overlapErrorMessageForm)){
            this.overlapErrorMessageForm = Ext.create(‘ppData.priceApplyIndex.OverlapErrorMessageForm‘);
        }
        return this.overlapErrorMessageForm;
    },
    initComponent: function() {
        var me = this;
        me.items=[me.getOverlapErrorMessageForm()];
        me.buttons = [{
              cls : ‘yellow_button‘,
              text: ‘关闭‘,
              handler: function() {
                me.close();
              }
        }];
        me.callParent();
    }
});
/**
 * 错误消息Form
 */
Ext.define(‘ppData.priceApplyIndex.OverlapErrorMessageForm‘, {
    extend:‘Ext.form.FormPanel‘,
    items: [{
        xtype     : ‘textareafield‘,

        name      : ‘errorMessage‘,

        autoScroll:true,
        anchor    : ‘100%‘,

        height:300
    }]
});

2 mvc

    // 导入
    @Autowired(required = false)
    @Qualifier("ppPriceReader")
    private ExcelReader ppPriceReader;
 @SuppressWarnings("unchecked")
      @RequestMapping(value = "/importPpPrice.do")
      @ResponseBody
      public ResultEntity importPpPrice(@RequestParam(value = "file", required = false) MultipartFile file,
              HttpServletRequest request, ModelMap model,String id) {
          //得到当用户
          UserEntity currentUser = DpapUserContext.getCurrentUser();
          ResultEntity resultEntity = new ResultEntity();
          if (file == null) {
              log.error("文件为空!", LogConstant.LOG_TYPE_EXCEPTION);
              resultEntity.setMsg("文件为空!");
              resultEntity.setSuccess(false);
          }
          String name = file.getOriginalFilename();// 获取上传文件名,包括路径
          long size = file.getSize();
          if ((name == null || name.equals("")) && size == 0) {
              log.error("文件为空!", LogConstant.LOG_TYPE_EXCEPTION);
              resultEntity.setMsg("文件为空!");
              resultEntity.setSuccess(false);
          }
          try {
              InputStream in = file.getInputStream();
              Map<String, Object> beans = new HashMap<String, Object>();
              ReadStatus readStatus = ppPriceReader.readAll(in, beans);
              if (readStatus.getStatus() == 0) {
                  List<ImportPriceVo> list = (List<ImportPriceVo>)
                   beans.get("ppPrice_Import_Moddle");
                  if (CollectionUtils.isEmpty(list)) {
                      resultEntity.setMsg("解析数据为空!");
                      resultEntity.setSuccess(false);
                  }
                  // 分批导入限制
                  if (list.size() > 1000) {
                      resultEntity.setMsg("一次最多只能导入1000条数据");
                      resultEntity.setSuccess(false);
                      return resultEntity;
                  }

                  String msg = null;
                  // 执行导入方法
                 msg = ppAuditPriceMainService.importPrice(list, currentUser, id);
                  if (StringUtils.isNotBlank(msg)) {
                      resultEntity.setMsg(msg);
                      resultEntity.setSuccess(false);
                  } else {
                      resultEntity.setMsg("操作成功");
                      resultEntity.setSuccess(true);
                  }
              } else {
                  log.error("文件解析异常!", LogConstant.LOG_TYPE_EXCEPTION);
                  resultEntity.setMsg("文件解析异常!");
                  resultEntity.setSuccess(false);
              }
          } catch (IOException e) {
              log.error(e.getMessage(), LogConstant.LOG_TYPE_EXCEPTION, e);
              e.printStackTrace();
              resultEntity.setMsg("文件解析异常!详情:" + e.getMessage());
              resultEntity.setSuccess(false);
          }
         return resultEntity;
      }

reader

导入策略

时间: 2024-10-11 05:26:02

spring-excel-导入的相关文章

一个基于POI的通用excel导入导出工具类的简单实现及使用方法

前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴.经过思考,认为一百个客户在录入excel的时候,就会有一百个格式版本,所以在实现这个功能之前,所以要统一excel的格式.于是提供了一个通用excel模版的下载功能.当所有客户用模版录入好数据再上传到系统,后端对excel进行解析,然后再持久化到数据库. 概述: 此工具类的几大特点 1.基本导入导出

SNF开发平台WinForm之十-Excel导入-SNF快速开发平台3.3-Spring.Net.Framework

7.1运行效果: 2.Excel导入开发实现 2.1. 创建窗体,修改命名空间 新增的窗体命名“FrmImport表名”,这个导入窗口比较其它窗口会特殊一些,需要继承BaseFormImport父级窗体 2.2.在新建窗体中写方法 构造方法,是用来设置 导入的窗体名称,和下载导入模版名称,指定必填列. 2.3.AddItem在“导入数据”事件时会被调用,并且每一行数据转换成实体对象过来,我们可以对实体对象进行操作保存或者其它处理. 2.4.添加导入按钮 2.5.在调用按钮事件写入调用导入窗体代码

将Excel导入DataGridView 中的"select * from [Sheet1$]"中[ ]里面表单名的动态获取

Sheet1$是Excel默认的第一个表名,如果改动:select * from [Sheet1$]"将查询失败,因此应根据选择自动获取excel表名: 1 OpenFileDialog ofd = new OpenFileDialog(); //选择文件路径 2 ofd.Title = "Excel文件"; 3 ofd.FileName = ""; 4 ofd.Filter = "Excel文件(*.xls)| *.xls"; 5 s

.net 自己写的操作Excel 导入导出 类(以供大家参考和自己查阅)

由于现在网页很多都关系到Excel 的操作问题,其中数据的导入导出更是频繁,作为一个菜鸟,收集网上零散的知识,自己整合,写了一个Excel导入到GridView ,以及将GridView的数据导出到EXCEL的类方法,以供参考和方便自己以后查阅. 1 #region 引用部分 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Web; 6 using System.Dat

Excel导入导出的业务进化场景及组件化的设计方案(转)

1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候,再分享分享. 话说最近外面IT行情飞涨还咋的,人都飞哪去了呢,听说各地的军情都进入紧急状态了. 回归下正题,今天就抽点时间,写写技术文,和大伙分享一下近年在框架设计上的取的一些技术成果. 2:项目背景 在针对运营商(移动.联通.电信.铁塔)的信息类的系统中,由于相关的从业人员习惯于Excel的办公

Java实现Excel导入数据库,数据库中的数据导入到Excel

实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1.添加jxl.jar mysql-connector-java.1.7-bin.jar包到项目的lib目录下­ 2.Excel文件目录:D://book.xls 3.数据库名:javenforexcel 4.表名:stu 5.编写类:连接mysql的字符串方法.插入的方法.实体类­­ 表结构如下 : 连接数据库的工具类 package com.javen.db; import java.sql.Co

Excel导入oracle库

Excel导入oracle库 ? 建表 ? /*==============================================================*/ /* DBMS name: ORACLE Version 10gR2 */ /* Created on: 2017/9/18/周一 14:19:00 */ /*==============================================================*/ ? ? drop table D

利用反射实现通用的excel导入导出

如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 1 package com.bean; 2 3 public class Book { 4 private int id; 5 private String name; 6 private String type; 7 // public int a; 8 9 public String getType() { 10 System.ou

excel导入 HSSFWorkbook和XSSFWorkbook

excel导入 excel版本有03版本和07版本的区别,文件后缀名分别为.xls和.xlsx.它们对应的POI中的Workbook也是不同的,分别是HSSFWorkbook和XSSFWorkbook: 对于不同版本的EXCEL文档要使用不同的工具类,如果使用错了,会提示如下错误信息. org.apache.poi.openxml4j.exceptions.InvalidOperationException org.apache.poi.poifs.filesystem.OfficeXmlFil

excel导入导出优化

对于上一篇excel中出现的问题,在excel导入导出中都做了优化.还是eclipse+jdk1.8,但是这个项目是一个web项目,需要配合Tomcat服务器,并且使用了SSH框架, I/O操作过多 首先,对于I/O操作过多,那么就不像之前一样,一条一条的添加或者更新;而且凑齐一堆,也就是一个list集合,然后统一的批量保存. 使用SessionFactory获取当前的session,然后调用session的persist方法,保存实体.只是设置了一个批量的量值.每到30条数据,就将缓存同步到数