欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【进度条在.net导入Excel时的应用实例】,下面是详细的讲解!
进度条在.net导入Excel时的应用实例
//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;
}
关于进度条在.net导入Excel时的应用实例的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【服务器】asp.net页面状态管理cookie和服务器状
- 如何取消.net后台线程的执行
- 【WeakReference】WeakReference(弱引用)让GC需要
- 【Repeater控件】.NET实现Repeater控件+AspNetPag
- 【客户端】获取客户端IP地址c#/vb.net各自实现代
- 【asp】asp.net上传execl文件后 在页面上加载显示
- 【Excel】页面导出为Excel的时间格式的问题-时间
- 【ref】asp.net(c#)ref out params的区别-out-pa
- 【数据控件】asp.net获得数据控件事件索引并获取
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
