本文实例讲述了进度条在.net导入Excel时的应用,分享给大家供大家参考。具体实现方法如下:
在程序开发过程中,往往会涉及到将Excel表格导入到数据库中的需求,而当excel表格内容很多的时候,我们往往会很难去捕捉它的执行过程进度和一些错误信息,此时我们便可以通过以下方法去解决这些难题,具体实现过程分析如下:
一、建立一个web应用程序,在程序中首先创建一个html文件命名为ProgressBar,文件内容如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script type="text/javascript"> //开始处理 function BeginTrans(msg) { WriteText(msg); } //设置进度条进度 function SetPorgressBar(msg, pos) { ProgressBar.style.width = pos + "%"; WriteText(msg + " 已完成" + pos + "%"); } //处理结束 function EndTrans(msg) { if (msg == "") WriteText("完成。"); else WriteText(msg); } //设置时间信息 function SetTimeInfo(msg) { WriteText(msg); } // 更新文本显示信息 function WriteText(str) { var strTag = '<font face="Verdana, Arial, Helvetica" size="2" color="#ea9b02"><B>' + str + '</B></font>'; document.getElementById("Msg2").innerHTML = strTag; } </script> </head> <body> <table align="center" style="height:100%"> <tr style="height:45%"><td></td></tr> <tr> <td> <div id="ProgressBarSide" style="width:300px; color:Silver;border-width:1px; border-style:Solid;"> <div id="ProgressBar" align="center" style="height:20px; width:0%; background-color:#316AC5;"></div> </div> </td> <td> <div id="Msg2" style="height:16px;"></div> </td> </tr> <tr style="height:50%"><td></td></tr> </table> </body> </html>
//1.这里为了简便,我只写出了前端页面中的body体部分供参考: <form id="forms" runat = "server"> <table align="center" style="height:100%"> <tr style="height:45%"><td></td></tr> <tr> <td align="center" style="height: 24px; width: 100px;"> Excel文件</td> <td style="height: 24px"> <asp:FileUpload ID="fuGlossaryXls" runat="server"/> <asp:Label ID="Label2" runat="server" Font-Bold="True" ForeColor="Red" Text="不能为空" Visible="False"></asp:Label></td> <td> <asp:Button ID="Button1" runat="server" CssClass="mybotton" Text="导入" Width="60px" onclick="Button1_Click"/></td> </tr> </table> </form> //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 = "<script>BeginTrans('正在加载数据,请耐心等待...');</script>"; 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 = "<script>EndTrans('第" + j.ToString() + "行数据写入错误。');</script>"; 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; jsBlock = "<script>SetPorgressBar('已加载到第" + (j + 1).ToString() + "条','" + cpos.ToString() + "');</script>"; Response.Write(jsBlock); Response.Flush(); } myTrans.Commit();//提交 } catch (Exception ex) { myTrans.Rollback();//回滚 ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('" + ex.Message + "');</script>"); } finally { conn.Dispose(); conn.Close();//关闭数据库连接 } } else { ClientScript.RegisterStartupScript(GetType(), "", "alert('请选择Excel文件!');", true); } } else { ClientScript.RegisterStartupScript(GetType(), "", "alert('请选择要导入的Excel!');", true); } if (!err)//加载中并没有出现错误 { // 处理完成 jsBlock = "<script>EndTrans('处理完成。');</script>"; Response.Write(jsBlock); Response.Flush(); } else { jsBlock = "<script>EndTrans('共有"+maxrows.ToString()+"条数据需要加载,其中 有"+errcount.ToString()+"条数据录入错误!');</script>"; 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 = "<script>SetTimeInfo('加载完成,共用时" + spanTime + "');</script>"; 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; }
三、项目执行过程中的效果图展示如下:
这个是程序测试中使用的excel表格实例。
希望本文所述对大家的.net程序设计有所帮助。
本文向大家介绍java实现Excel的导入、导出,包括了java实现Excel的导入、导出的使用技巧和注意事项,需要的朋友参考一下 一、Excel的导入 导入可采用两种方式,一种是JXL,另一种是POI,但前者不能读取高版本的Excel(07以上),后者更具兼容性。由于对两种方式都进行了尝试,就都贴出来分享(若有错误,请给予指正) 方式一、JXL导入 所需jar包 JXL.jar 方式二、POI
实际上,我已经使用Node.js和mongoDB完成了一个示例项目,它允许用户保存注释,现在我正在进行导出和导入 点击导出按钮,会下载一个带有用户名和备注字段的excel文件,用户必须在下载的excel文件中写入用户名和备注,现在点击导入按钮,会显示一个对话框,它会显示一个选择文件的按钮。这里我们需要选择和上传excel 上传成功后,数据将存储在mongoDB数据库中。 我已经使用javascri
本文向大家介绍VC++进度条process Bar的用法实例,包括了VC++进度条process Bar的用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了VC进度条的用法实例,分享给大家供大家参考。具体实现代码如下: 希望本文所述对大家的VC++程序设计有所帮助。
本文向大家介绍Bootstrap 3 进度条的实现,包括了Bootstrap 3 进度条的实现的使用技巧和注意事项,需要的朋友参考一下 基本样式 自带进度 多种颜色 条纹 动态 堆叠 以上所述是小编给大家介绍的Bootstrap 3 进度条的实现,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!
本文向大家介绍Android实现环形进度条的实例,包括了Android实现环形进度条的实例的使用技巧和注意事项,需要的朋友参考一下 Android实现环形进度条的效果图如下: 自定义控件:AttendanceProgressBar 代码如下: 因为是自定义控件,所以在attr.xml文件定义了一些控件属性,以便在xml文件中设置这些属性 代码如下: 最后,在xml文件中,可以这样使用 这只是初步处
本文向大家介绍WPF实现进度条实时更新效果,包括了WPF实现进度条实时更新效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了WPF实现一个实时更新的进度条,供大家参考,具体内容如下 效果图 xaml代码 后台代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。