進(jìn)度條在.net導(dǎo)入Excel時的應(yīng)用實例
本文實例講述了進(jìn)度條在.net導(dǎo)入Excel時的應(yīng)用,分享給大家供大家參考。具體實現(xiàn)方法如下:
在程序開發(fā)過程中,往往會涉及到將Excel表格導(dǎo)入到數(shù)據(jù)庫中的需求,而當(dāng)excel表格內(nèi)容很多的時候,我們往往會很難去捕捉它的執(zhí)行過程進(jìn)度和一些錯誤信息,此時我們便可以通過以下方法去解決這些難題,具體實現(xiàn)過程分析如下:
一、建立一個web應(yīng)用程序,在程序中首先創(chuàng)建一個html文件命名為ProgressBar,文件內(nèi)容如下:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
//開始處理
function BeginTrans(msg) {
WriteText(msg);
}
//設(shè)置進(jìn)度條進(jìn)度
function SetPorgressBar(msg, pos) {
ProgressBar.style.width = pos + "%";
WriteText(msg + " 已完成" + pos + "%");
}
//處理結(jié)束
function EndTrans(msg) {
if (msg == "")
WriteText("完成。");
else
WriteText(msg);
}
//設(shè)置時間信息
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>
二、創(chuàng)建一個aspx頁面,前后端代碼分別如下:
<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="導(dǎo)入" Width="60px" onclick="Button1_Click"/></td>
</tr>
</table>
</form>
//2.后端部分代碼如下:
//這里是激發(fā)導(dǎo)入按鈕點擊事件
protected void Button1_Click(object sender, EventArgs e)
{
string cfilename = this.fuGlossaryXls.FileName;//獲取準(zhǔn)備導(dǎo)入的文件名稱
if (cfilename == "")
{
Label2.Visible = true;
return;
}
else
{
Label2.Visible = false;
}
//////////////顯示進(jìn)度/////////////////////////////////////////////////////////////////////////////
DateTime startTime = System.DateTime.Now;
DateTime endTime = System.DateTime.Now;
// 根據(jù) ProgressBar.htm 顯示進(jìn)度條界面
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('正在加載數(shù)據(jù),請耐心等待...');</script>";
Response.Write(jsBlock);
Response.Flush();
string fileName = fuGlossaryXls.PostedFile.FileName.Substring(fuGlossaryXls.PostedFile.FileName.LastIndexOf("\\") + 1);//獲取準(zhǔn)備導(dǎo)入文件的文件名
string suffix = fileName.Substring(fileName.LastIndexOf(".") + 1);//獲取準(zhǔn)備導(dǎo)入文件的后綴名
System.Threading.Thread.Sleep(200);
int maxrows = 0;//用來記錄需要加載的數(shù)據(jù)總行數(shù)
bool err = false;//用來記錄加載狀態(tài)
int errcount = 0;//用來記錄加載錯誤行數(shù)
if (fuGlossaryXls.HasFile)//判斷當(dāng)前是否有選取文件
{
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 條件的數(shù)據(jù)行
//////////拓展////////////////////////////////////////////////////////
string sqlconnect = "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456;";//本地數(shù)據(jù)庫鏈接
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();//首先執(zhí)行清除表內(nèi)容操作
for (int j = 0; j < dt.Rows.Count; j++)//循環(huán)向數(shù)據(jù)庫中插入excel數(shù)據(jù)
{
if (string.IsNullOrEmpty(dt.Rows[j][0].ToString()))
{
jsBlock = "<script>EndTrans('第" + j.ToString() + "行數(shù)據(jù)寫入錯誤。');</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();//逐行向表中插入數(shù)據(jù),注意字段的對應(yīng)
}
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();//關(guān)閉數(shù)據(jù)庫連接
}
}
else
{
ClientScript.RegisterStartupScript(GetType(), "", "alert('請選擇Excel文件!');", true);
}
}
else
{
ClientScript.RegisterStartupScript(GetType(), "", "alert('請選擇要導(dǎo)入的Excel!');", true);
}
if (!err)//加載中并沒有出現(xiàn)錯誤
{
// 處理完成
jsBlock = "<script>EndTrans('處理完成。');</script>";
Response.Write(jsBlock);
Response.Flush();
}
else
{
jsBlock = "<script>EndTrans('共有"+maxrows.ToString()+"條數(shù)據(jù)需要加載,其中 有"+errcount.ToString()+"條數(shù)據(jù)錄入錯誤!');</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(); //取開始時間和結(jié)束時間兩個時間差的絕對值
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表數(shù)據(jù)
{
//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”提供程序”,此時大多數(shù)情況下我們只需要去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();//關(guān)閉EXCEL的連接
return dt;
}
三、項目執(zhí)行過程中的效果圖展示如下:
這個是程序測試中使用的excel表格實例。
希望本文所述對大家的.net程序設(shè)計有所幫助。
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實現(xiàn)方法及思路
- VB.NET進(jìn)度條的方法代碼
- asp.net(c#)開發(fā)中的文件上傳組件uploadify的使用方法(帶進(jìn)度條)
- asp.net 在客戶端顯示服務(wù)器端任務(wù)處理進(jìn)度條的探討
- asp.net 生成靜態(tài)頁時的進(jìn)度條顯示
- 利用Asp.Net回調(diào)機制實現(xiàn)進(jìn)度條
- asp.net web大文件上傳帶進(jìn)度條實例代碼
- ASP.NET實現(xiàn)用圖片進(jìn)度條顯示投票結(jié)果
- ASP.NET技巧:教你制做Web實時進(jìn)度條
- asp.net導(dǎo)出excel數(shù)據(jù)的常見方法匯總
- ASP.NET中上傳并讀取Excel文件數(shù)據(jù)示例
- asp.net讀取excel文件的三種方法示例
- .NET操作Excel實例分享
相關(guān)文章
.NET中 關(guān)于臟讀 不可重復(fù)讀與幻讀的代碼示例
本篇文章小編將為大家介紹,.NET中 關(guān)于臟讀 不可重復(fù)讀與幻讀的代碼示例,有需要的朋友可以參考一下2013-04-04OpenCV 3.1.0+VS2015開發(fā)環(huán)境配置教程
這篇文章主要為大家詳細(xì)介紹了OpenCV 3.1.0+VS2015開發(fā)環(huán)境配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11web.config中配置數(shù)據(jù)庫連接的方式
Web.config文件是一個XML文本文件,它用來儲存 ASP.NET Web 應(yīng)用程序的配置信息(如最常用的設(shè)置ASP.NET Web 應(yīng)用程序的身份驗證方式),它可以出現(xiàn)在應(yīng)用程序的每一個目錄中。本文主要介紹web.config中配置數(shù)據(jù)庫連接的兩種方式,一起來看。2015-10-10asp.net中利用ajax獲取動態(tài)創(chuàng)建表中文本框的值
通常在做主從表的數(shù)據(jù)錄入中,會碰到在一個頁面上同時錄入主表數(shù)據(jù)和從表數(shù)據(jù),主表的數(shù)據(jù)只有一條,從表的數(shù)據(jù)有一條到多條,這樣就要動態(tài)創(chuàng)建從表數(shù)據(jù)錄入入口。2010-03-03ASP.NET MVC5+EF6+EasyUI后臺管理系統(tǒng) 微信公眾平臺開發(fā)之消息管理
這篇文章主要介紹了ASP.NET MVC5+EF6+EasyUI后臺管理系統(tǒng),微信公眾平臺開發(fā)之消息管理,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09