批量导入现在基本已经成为各类系统的标配了,当前,我们订餐系统也不例外,什么商家呀、商品呀、优惠码之类的,都少不了。毕竟嘛,对非开发人员来说,看到Excel肯定比看到很多管理系统还是要亲切很多的。这里,我就分享下自己如何一步步踩坑、爬坑到最后完成Excel批量导入的历程。或许,你还有更好的方案,不妨也分享下;当然,也希望能给正在坑中,或者爬坑的同仁们一点帮助。

   注:Excel操作用了 org.in2bits.myxls.dll  这个不知道是否是免费的,没仔细查过。

年轻时的代码是我们曾经年轻过的证明

  第一次,遇到Excel批量导入时,很自然的,onclick,INSERT...本地用只有几条数据的Excel测试正常,select下,呀! 数据正常导入,笑咪咪的生成、发布,ok,搞定。客户使用时,用了几百条数据的Excel导入,会出现什么问题相信大家都知道吧,多半是执行超时,于是,再baidu,google...,原来可以设置executionTimeout。【设置这个后,应该还有问题,就是想不起了来,于是才有了下文】

努力不一定成功,但一定在成长

  当我费尽心思希望通过设置解决超时问题,处处碰壁后才知道,这个通常要用多线程。那会才知道见识有多重要,才知道多看博客有多重要。一翻baidu,google后,有了下面的代码。

    protected void btDo_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(InportUser));
t.Start();
} public void InportUser()
{
///读取excel,循环insert
}

  这样写,超时的情况变少了(好像也会,具体什么时候,真是惭愧,没有好好研究过),但是有一个不能接受的现像就是,我不知道什么时候执行完了,也就不知道什么时候可以关浏览器。那会儿,只想到了一个好笨的办法,一直select看条数还有没有增加。由于一直没有找到好的办法,这个情况一直存在于我们系统中很长时间,也像一个石头一直压在我心中,每每看到,心里总是隐隐不快,我都不能接受的东西,还要让客户去接受。。。直到前不久,才看到 BackgroundWorker 。那会才知道见识有多重要,才知道多看博客有多重要。

 

失败让我们慢慢蜕去年轻的印记

  BackgroundWorker 具体内容,这里就不去写了,baidu,google,msdn有全面、权威的介绍。我只分享下这个过程中自己踩的坑吧:

  1.一直没执行 DoWork,也没有错误日志;您可能页面中没有加入 Async="true。

  2.HttpContext.Current 为null;当时要在DoWork中为每个记录生成一个二维码图片(在一个类中生成),HttpContext.Current.Server一直为空,瞬间想起之前有个博客是《HttpContext.Curren并非无处不在》,当时一下就知道了多看博客有多重要。

  3.执行不超时,数据库链接可能会超时。这个和BackgroundWorker没什么关系,不过好像一起出现的概率比较大哦。正常情况简单一句SqlCommand.CommandTimeout = 0; 就ok了。

  关于BackgroundWorker的代码,应该随便一搜就是一箩筐,我还是帖下自己的吧,愿意搜索的自己搜索吧,愿意将就的就看下下面的吧:

  aspx主要代码,主要就是一个设置和上传控件的问题

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="importshopcart.aspx.cs" Inherits="importshopcart"
Async="true" %> <asp:FileUpload runat="server" ID="fuFoodExcel" />
<asp:Button ID="btSave" runat="server" CssClass="button_1" OnClick="btSave_Click"
Text="导入" OnClientClick=" showload_super();"></asp:Button>
<a href="demo.xls">下载模版</a>

  aspx.cs主要代码,只实现了执行完成方法,这点就是之前一直无法实现的东西,开始执行时弹出加载框,执行完成可以进行提示,详细的东西,大家可以自己动手搜索下。

protected void btSave_Click(object sender, EventArgs e)
{
bgw = new BackgroundWorker();
bgw.WorkerSupportsCancellation = true;
bgw.WorkerReportsProgress = true; bgw.DoWork += new DoWorkEventHandler(DoWork);
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted); bgw.RunWorkerAsync();
} /// <summary>
/// 耗时操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void DoWork(object sender, DoWorkEventArgs e)
{
string suffix = "";
if (this.fuFoodExcel.HasFile)
{
suffix = Path.GetExtension(this.fuFoodExcel.PostedFile.FileName);
if (suffix == ".xls" || suffix == ".XLS")
{ }
else
{
msg = "文件格式不正确,请上传excel文件";
return;
}
}
else
{
msg = "请上传excel文件";
return;
}
string filepath = "~/upload/excel/";
if (!System.IO.Directory.Exists(Server.MapPath(filepath)))
{
System.IO.Directory.CreateDirectory(Server.MapPath(filepath));
} string sFile = filepath + System.DateTime.Now.ToString("yyyyMMddHHmmssffff") + suffix; //上传后文件的新名
//保存文件
try
{
this.fuFoodExcel.PostedFile.SaveAs(Server.MapPath(sFile));
}
catch (Exception ex)
{
HJlog.toLog(ex.ToString());
return;
} //必要的判断以防止excel格式的问题导致程序错误
try
{
//解析文件并保存数据到数据库
XlsDocument xls = new XlsDocument(Server.MapPath(sFile));
Worksheet sheet = xls.Workbook.Worksheets[]; //excel格式:第一行是说明,第二行是标题,第三行开始是数据
for (int i = ; i < sheet.Rows.Count; i++) //
{
if (sheet.Rows[ushort.Parse(i.ToString())] != null && sheet.Rows[ushort.Parse(i.ToString())].CellCount >= && sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse("")) != null && sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse("")).Value != null)
{
addressbookInfo mm = new addressbookInfo();
mm.Parentid = ;
mm.Status = ;
mm.Isdel = ;
mm.Classname = sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse("")).Value.ToString();
mm.Depth = ;
mm.Priority = ;
mm.Pic = sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse("")).Value.ToString();
mm.Revevar = sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse("")).Value.ToString();
mm.path = ChineseConvert.UtilIndexCode(mm.Classname); dal.Add(mm);
count++; }
else
{
break;
}
}
}
catch (Exception ex)
{
msg = "导入出错,请检查excel";
HJlog.toLog(ex.ToString());
return;
} msg = "操作成功,已经导入" + count + "个地址。"; } /// <summary>
/// 完成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
string tipmsg = "";
if (count == )
{
tipmsg = "操作未完成," + msg;
}
else
{
tipmsg = msg;
} AlertScript.RegScript(this.Page, "alert('" + tipmsg + "');hideload_super();");
}

  执行过程,和完成提示效果:

  aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,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" alt="" />

结语

  文章到此就结束了,分享还会继续。说实在的很多细节其实我自己也不是很清楚,有错误的地方,请指正,也希望能给部分园子里的同学带来帮助。

  成为一名优秀的程序员!

  

  

订餐系统之Excel批量导入的更多相关文章

  1. Excel批量导入商品,遇到导入失败记录到另一个Excel中供下载查看

    /// <summary> /// EXCEL批量导入 /// </summary> /// <param name="filePath">文件 ...

  2. zabbix3.4用Python脚本Excel批量导入主机

    1.安装xlrd读取Excel文件 1.1. 下载setuptools-38.2.4.zip,上传至zabbix服务器解压安装,下载地址:https://pypi.python.org/package ...

  3. JAVA实现Excel批量导入

    一.模板下载: 先将模板放在项目WebRoot下的download文件夹下: /** * @Title: downloadFile * @Description: 模板下载 (网络地址) * @par ...

  4. java使用POI实现Excel批量导入数据

    1.准备工作 1.1 创建模板表头与数据库表字段一一对应,示例如下 1.2将模板放入项目中,如下图所示: 2.前端页面 2.1 使用超链接提供模板下载地址 <html lang="zh ...

  5. Dynamic CRM 2013学习笔记(三十一)自定义用excel批量导入实体数据

    有一个实体的子表数据量太大,于是客户想用execel来导入实体数据.首先想到的是用系统自带的Import Data,客户嫌太麻烦,比如lookup字段要做map等. 下面是具体的实现步骤: 一.定义e ...

  6. C# 从Excel 批量导入数据库

    最近遇到了关于 C# MVC 批量添加数据的问题,解决后就自己写了一个未完成的小Demo  不管什么编程语言都会提供操作Excel文件的方式,C#操作Excel主要有以下几种方式: 1.Excel 说 ...

  7. Excel批量导入(导出同理)

    在做JavaWeb中添加数据使我们在所难免会遇到的,在大数据的环境下批量添加和批量删除是必须的,而批量删除只需要获取到我们需要删除的ID就可以了,在批量添加中我们就会遇到问题,问题是得到批量的数据,这 ...

  8. EXCEL批量导入到Sqlserver数据库并进行两表间数据的批量修改

    Excel 大量数据导入到sqlserver生成临时表并将临时表某字段的数据批量更新的原表中的某个字段 1:首先要对EXCEL进行处理 列名改成英文,不要有多余的列和行(通过ctrl+shift 左或 ...

  9. 从零开始实现放置游戏(六)——实现后台管理系统(4)Excel批量导入

    前面我们已经实现了在后台管理系统中,对配置数据的增删查改.但每次添加只能添加一条数据,实际生产中,大量数据通过手工一条一条添加不太现实.本章我们就实现通过Excel导入配置数据的功能.这里我们还是以地 ...

随机推荐

  1. 实现bootstrap布局的input输入框中的图标点击功能

    使用bootstrap布局可以在input的输入框中添加譬如登录名输入框中的一键清除图标和密码输入框中显示密码的小眼睛图标.如下图: 但是在将图标放入input输入框中,这些小图标是无法获得点击事件的 ...

  2. SharePoint 2013 Designer系列之数据视图筛选

    在SharePoint中,我们经常需要对列表进行简单的筛选,这时,数据视图就有作用了,我们可以定制对于字段的筛选,来进行展示:特别的,筛选不同于搜索,并没有对于附件或者文档的全文检索,如果需要全文检索 ...

  3. OC 观察者模式(通知中心,KVO)

    OC 观察者模式(通知中心,KVO) 什么是观察者模式??? A对B的变化感兴趣,就注册为B的观察者,当B发生变化时通知A,告知B发生了变化.这就是观察者模式. 观察者模式定义了一种一对多的依赖关系, ...

  4. React Native 红屏之Could not connect to development server.

    React Native 是目前最火的开发框架,其他不说了,上Bug. 按照  React Native iOS环境搭建 高级版 在mac上  搭建 React Native  环境,运行 项目 若出 ...

  5. 编写Javascript类库(jQuery版) - 进阶者系列 - 学习者系列文章

    这些年主要关注于项目管理方面的工作,编码就比较少了.这几天比较空闲,就想把原来的经验沉淀下来,一个是做好记录,以后如果忘记了还能尽快找回来,第二个是写写博文,算是练练手笔吧. 言归正传,这次写的是Ja ...

  6. Nginx搭建反向代理服务器过程详解

    一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...

  7. C# CompareTo 和 String.Compare

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. Linux如何找出用户的创建时间

    在Linux系统中,如何找到用户创建的时间呢? 其实是没有标准方法查找用户创建时间.下面再搜索了一些资料后,自己验证并测试了一下这些方法,仅供参考: 1:如果创建的用户有家目录,那么可以ls -l / ...

  9. 使用Java实现简单串口通信

    最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^ 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar ...

  10. oracle查看对象信息

    1.查看某用户下所有对象的信息: SELECT owner, object_type, status, COUNT(*) count# FROM all_objects where owner='xx ...