后台Excel导入与导出

这篇博客主要探讨了后台如何实现Excel的导入与导出。在导入过程中,通过使用XML模板,将Excel文件转换为XML,再对数据字段进行绑定。而在导出时,详细介绍了如何从后台生成Excel文件。

一:导入Excel数据

  [Area("Pumch")]
    public class UserController :  BaseController
    {
		protected IUserService m_UserService= IocProxyFactory.GetService<IUserService>();

        public JsonResult Import()
        {
            var jObject = ParseRawData().GetAwaiter().GetResult();

            var commandName = jObject["Command"].ToString();

            var path = Convert.ToString(jObject["Data"]["SitePath"]);

            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentException("请上传Excel路径SitePath");
            }

            return Json(Exec("User", jObject));
        }
		
        IDictionary<string, IDictionary<string, AuthMethod>> m_MethodDic = null;
		
		protected override AuthMethod GetMethod(string actionName, string commandName)
        {
            if (m_MethodDic == null)
            {
                m_MethodDic = new Dictionary<string, IDictionary<string, AuthMethod>>()
                {
                    {"User", new Dictionary<string, AuthMethod>(){
                        {"Import", new AuthMethod(){Method= m_UserService.Import}}
                    }}
                };
            }

            m_MethodCommandDic = m_MethodDic;

            return base.GetMethod(actionName, commandName);
        }
	}
public Result Import(JObject jObject)
		{
			var path = AppDomain.CurrentDomain.BaseDirectory + "wwwroot" + Convert.ToString(jObject["SitePath"]);

			try
			{
				var dataList = ExcelParse.Parse<UserEntity>(path, new Dictionary<string, string>()
			{
				 {"a", "RealName"}
				,{"b", "UserName"}
				,{"c", "Identity"}
			}, 1);

				var newList = new List<UserEntity>();

				foreach (var i in dataList)
				{
					if (newList.SingleOrDefault(y => y.UserName == i.UserName) == null)
					{
						newList.Add(i);
					}
				}

				lock (UserToolsSingleton.LockUser(LockEnum.用户导入.ToString()))
				{
					var userNameList = newList.Select(i => i.UserName).ToList();
					var identityList = newList.Select(i => i.Identity).ToList();

					var userDic = m_Dao.GetListAll(i => i.UserID, i => userNameList.Contains(i.UserName) && identityList.Contains(i.Identity) && i.Enable == 1, true).ToDictionary(i => i.UserName, i => i);

					foreach (var i in newList)
					{
						if (userDic.ContainsKey(i.UserName))
						{
							continue;
						}
						
						i.UserPassWord = PasswordHelper.ConverToPassword("666666");
						i.Enable = 1;
						i.CreateTime = DateTime.Now;

						m_Dao.CreateNotSave(i);
					}

					m_Dao.Save();
				}
			}
			catch (Exception ex)
			{
				LogHelper.Info("导出Excel异常:" + ex.ToString() + ",Path:" + path);

				return Result.GetError("格式错误请尝试对EXCEL内容全选,并进行\"清除格式\"操作");
			}

			return Result.GetSuccess();
		}
		

二:导出Excel数据

1.需要XML模板,excel打开模板另存为xml,然后对需要导出的数据字段进行绑定。

  public void ExportFinanceRecordUser(string shoppingOrderNo, string insuranceOrderNo, string telephone, DateTime? startTime, DateTime? endTime, byte? type, byte? isFrozen)
        {
            var ret = m_FinanceRecordService.ExportFinanceRecord(shoppingOrderNo, insuranceOrderNo, telephone, startTime, endTime, type, isFrozen);

            string fileName = DateTime.Today.ToString("yyyy-MM-dd") + "财务记录.xls";

            System.Web.HttpContext.Current.Response.Charset = "utf-8";
            System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
            System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8).ToString());
            System.Web.HttpContext.Current.Response.ContentType = "application/ms-excel";
            System.Web.HttpContext.Current.Response.Write(ret);
            System.Web.HttpContext.Current.Response.End();
        }
  public string ExportFinanceRecord(string shoppingOrderNo, string insuranceOrderNo, string telephone, DateTime? startTime, DateTime? endTime, byte? type, byte? isFrozen)
        {
            var rawData = @"{Command:'', 
                                Data:{
                                       Query:
                                            {ShoppingOrderNo:'" + shoppingOrderNo + "',InsuranceOrderNo: '" + insuranceOrderNo + "',Telephone: '" + telephone + "',StartTime: '" + startTime + "',EndTime: '" + endTime + "',Type: '" + type + "',IsFrozen: '" + isFrozen + "'},Index:1,Pagesize:10000,Asc:false}}";

            var jObject = JObject.Parse(rawData);

            var data = (JObject)jObject["Data"];

            var list = GetList(data);

            var seralizeList = Newtonsoft.Json.JsonConvert.DeserializeObject<IDictionary<string, object>>(Newtonsoft.Json.JsonConvert.SerializeObject(list.Data));

            var newList = SerializeHelper.SerializeToList(seralizeList["List"]);

            for (int i = 0; i < newList.Count; i++)
            {
                var _d = newList[i];

                _d["CreateTime"] = Convert.ToDateTime(_d["CreateTime"]).ToString("yyyy-MM-dd HH:mm:ss");

                var financeRecordType = Convert.ToByte(_d["Type"]);

                switch (financeRecordType)
                {
                    case 1: _d["Type"] = "下单充值"; break;
                    case 2: _d["Type"] = "下单支付"; break;
                    case 3: _d["Type"] = "团队成员商城下单返利"; break;
                    case 4: _d["Type"] = "团队成员保险下单返利"; break;
                    case 5: _d["Type"] = "保险下单返利"; break;
                    case 6: _d["Type"] = "提现冻结"; break;
                    case 7: _d["Type"] = "提现审核拒绝"; break;
                    case 8: _d["Type"] = "提现审核成功"; break;
                    case 9: _d["Type"] = "红包消费"; break;
                    case 10: _d["Type"] = "商城下单返利"; break;
                    case 11: _d["Type"] = "红包赠送"; break;
                }

                var pointRecordIsFrozen = Convert.ToByte(_d["IsFrozen"]);

                switch (pointRecordIsFrozen)
                {
                    case 0: _d["IsFrozen"] = "已解冻"; break;
                    case 1: _d["IsFrozen"] = "未解冻"; break;
                    case 3: _d["IsFrozen"] = "已取消"; break;
                }

                var orderType = Convert.ToByte(_d["OrderType"]);

                switch (orderType)
                {
                    case 1: _d["OrderType"] = "实物订单"; break;
                    case 2: _d["OrderType"] = "虚拟订单"; break;
                    case 0: _d["OrderType"] = "无"; break;
                }
            }

            var context = new TemplateContext()
            {
                String = FileHelper.ReadFile(HttpContext.Current.Server.MapPath("/Export/ExportFinanceRecord.xml"), Encoding.UTF8),
                TemplateType = "preview",
                Source = new
                {
                    List = ScanRecordService.DicToInvariantCultureIgnoreCase(newList),
                    Length = newList.Count() + 1
                }
            };

            TemplateEngine.Current.Run(context);

            return context.Result();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值