• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

进度条在.net导入Excel时的应用实例

asp 搞代码 4年前 (2022-01-03) 33次浏览 已收录 0个评论

这篇文章主要介绍了进度条在.net导入Excel时的应用,以实例形式讲述了.net导入Excel时根据页面情况显示进度条的实现方法,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了进度条在.net导入Excel时的应用,分享给大家供大家参考。具体实现方法如下:

在程序开发过程中,往往会涉及到将Excel表格导入到数据库中的需求,而当excel表格内容很多的时候,我们往往会很难去捕捉它的执行过程进度和一些错误信息,此时我们便可以通过以下方法去解决这些难题,具体实现过程分析如下:

一、建立一个web应用程序,在程序中首先创建一个html文件命名为ProgressBar,文件内容如下:

代码如下:

   

   

       

       

   

   

           

               

           

       

       

       

二、创建一个aspx页面,前后端代码分别如下:

代码如下:
//1.这里为了简便,我只写出了前端页面中的body体部分供参考:

   

      

      

                                                   

Excel文件       
                                                           Visible=”False”>
       

//2.后端部分代码如下:
 //这里是激发导入按钮点击事件
        protected void Button1_Click(object sender, EventArgs e)
        {
            string cfilename = this.fuGlossaryXls.FileName;//获取准备导入的文件名称
            if (cfilename == “”)
            {
                Label2.Visible = true;
                return;
            }
            else
            {
                Label2.Visible = false;
            }
            //////////////显示进度/////////////////////////////////////////////////////////////////////////////
            DateTime startTime = System.DateTime.Now;
            DateTime endTime = System.DateTime.Now;

            // 根据 ProgressBar.htm 显示进度条界面
            string templateFileName = Path.Combine(Server.MapPath(“.”), “ProgressBar.htm”);
            StreamReader reader = new StreamReader(@templateFileName, System.Text.Encoding.GetEncoding(“gb2312”));
            string html = reader.ReadToEnd();
            reader.Close();
            Response.Write(html);
            Response.Flush();
            System.Threading.Thread.Sleep(1000);

            string jsBlock;
            // 处理完成
            jsBlock = “”;
            Response.Write(jsBlock);
            Response.Flush();

             string fileName = fuGlossaryXls.PostedFile.FileName.Substring(fuGlossaryXls.PostedFile.FileName.LastIndexOf(“\\”) + 1);//获取准备导入文件的文件名
             string suffix = fileName.Substring(fileName.LastIndexOf(“.”) + 1);//获取准备导入文件的后缀名
            
             System.Threading.Thread.Sleep(200);

             int maxrows = 0;//用来记录需要加载的数据总行数
             bool err = false;//用来记录加载状态
             int errcount = 0;//用来记录加载错误行数
             if (fuGlossaryXls.HasFile)//判断当前是否有选取文件
             {
                 if (suffix == “xlsx”)
                 {
                     DataTable dt = ExcelImport(fileName);
                     for (int i = 0; i <dt.Rows.Count; i++)
                     {
                         maxrows++;
                     }
                     //////////拓展////////////////////////////////////////////////////////
                     //DataView myView = new DataView(dt);
                     //myView.RowFilter = “name is not null”;
                     //int t = myView.Count;//获取满足RowFilter 条件的数据行
                     //////////拓展////////////////////////////////////////////////////////
                     string sqlconnect = “Data Source=.;Initial Catalog=test;User ID=sa;Password=123456;”;//本地数据库链接
                     SqlConnection conn = new SqlConnection(sqlconnect);
                     SqlTransaction myTrans = null;
                     try
                     {
                         SqlCommand cmd = new SqlCommand(null, conn);
                         conn.Open();
                         myTrans = conn.BeginTransaction();
                         cmd.Transaction = myTrans;
                         cmd.CommandText = “delete from test”;
                         cmd.ExecuteNonQuery();//首先执行清除表内容操作
                         for (int j = 0; j <dt.Rows.Count; j++)//循环向数据库中插入excel数据
                         {
                             if (string.IsNullOrEmpty(dt.Rows[j][0].ToString()))
                             {
                                 jsBlock = “”;
                                 Response.Write(jsBlock);
                                 Response.Flush();
                                 err = true;
                                 errcount++;
                             }
                             else
                             {
                                 cmd.CommandText = string.Format(“insert into test values(‘{0}’,'{1}’,'{2}’,'{3}’)”, dt.Rows[j][0], dt.Rows[j][1], dt.Rows[j][2], dt.Rows[j][3]);
                                 cmd.ExecuteNonQuery();//逐行向表中插入数据,注意字段的对应
                             }
                             System.Threading.Thread.Sleep(1000);
                             float cposf = 0;
                             cposf = 100 * (j + 1) / maxrows;
                             int cpos = (int)cposf;
                        来源gao@daima#com搞(%代@#码网     jsBlock = “”;
                             Response.Write(jsBlock);
                             Response.Flush();
                         }
                         myTrans.Commit();//提交
                     }
                     catch (Exception ex)
                     {
                         myTrans.Rollback();//回滚
                         ClientScript.RegisterStartupScript(this.GetType(), “alert”, “”);
                     }
                     finally
                     {
                         conn.Dispose();
                         conn.Close();//关闭数据库连接
                     }
                 }
                 else
                 {
                     ClientScript.RegisterStartupScript(GetType(), “”, “alert(‘请选择Excel文件!’);”, true);
                 }
             }
             else
             {
                 ClientScript.RegisterStartupScript(GetType(), “”, “alert(‘请选择要导入的Excel!’);”, true);
             }
             if (!err)//加载中并没有出现错误
             {
                 // 处理完成
                 jsBlock = “”;
                 Response.Write(jsBlock);
                 Response.Flush();
             }
             else
             {
                 jsBlock = “”;
                 Response.Write(jsBlock);
                 Response.Flush();
             }
             System.Threading.Thread.Sleep(1000);

             endTime = DateTime.Now;//录入完成所用时间
             TimeSpan ts1 = new TimeSpan(startTime.Ticks);
             TimeSpan ts2 = new TimeSpan(endTime.Ticks);
             TimeSpan ts = ts2.Subtract(ts1).Duration(); //取开始时间和结束时间两个时间差的绝对值
             String spanTime = ts.Hours.ToString() + “小时” + ts.Minutes.ToString() + “分” + ts.Seconds.ToString() + “秒”;
             jsBlock = “”;
             Response.Write(jsBlock);
             Response.Flush();

        }
        public DataTable ExcelImport(string fileName) //建立Excel表链接,返回Excel表数据
        {
                //EXCEL 的连接串
                string sConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;” +
                “Data Source=C:\\Documents and Settings\\Administrator\\桌面\\” + fileName + “;” +
                “Extended Properties=’Excel 8.0;IMEX=1′;”;
                //string sConnectionString = “Microsoft.ACE.OLEDB.4.0;” +
                //”Data Source=C:\\Documents and Settings\\Administrator\\桌面\\” + fileName + “;” +
                //”Extended Properties=’Excel 8.0;IMEX=1′;”;
                OleDbConnection objConn = new OleDbConnection(sConnectionString);//建立EXCEL的连接

//说明:程序运行到这里的时候有时会出错“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”,此时大多数情况下我们只需要去http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe下载一个AccessDatabaseEngine.exe安装即可,原因在于你的office没有安装ACCESS组件
                objConn.Open();
                OleDbCommand objCmdSelect = new OleDbCommand(“SELECT * FROM [Sheet1$]”, objConn);
                OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
                objAdapter1.SelectCommand = objCmdSelect;
                DataSet objDataset1 = new DataSet();
                objAdapter1.Fill(objDataset1, “XLData”);
                DataTable dt = objDataset1.Tables[0];
                //DataView myView = new DataView(dt);
                objConn.Close();//关闭EXCEL的连接
                return dt;
}

以上就是进度条在.net导入Excel时的应用实例的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:进度条在.net导入Excel时的应用实例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址