1. 程式人生 > >.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 顯示進度

//1.這裡為了簡便,我只寫出了前端頁面中的body體部分供參考: <form id="forms" runat = "server"> <table align="center" style="height:100%">     <tr style="height:45%"&g

在ASP.NET中將Excel檔案中資料匯入資料庫顯示進度

在ASP.NET中經常會遇到Excel檔案匯入資料庫的問題,遇到資料量比較大的時候,最好顯示進度條。 進度條設計是參考網上某牛人提供的程式碼,利用JS實現的,謝謝這個大牛了(忘記了當時記錄下他的大名了,:()。具體思路:首先將後臺伺服器上ProgressBar.htm 頁面內

(轉).net匯入excel檔案顯示進度

<tr>        <td align="center" style="height: 25px; width: 100px;">父分類</td>        <td valign="middle" style="height: 25px">       

Python獲取下載速度顯示進度

locks rom art 回調 filename bytes sleep format == #!/usr/bin/python3 # -*- coding:utf-8 -*- import sys import time from urllib impo

C# Winform下載檔案顯示進度

本來是要研究怎樣判斷下載完成,結果找到這個方法,可以在這個方法完成之後提示下載完成。 程式碼如下: using System; using System.Collections.Generic; using System.ComponentModel; usin

利用js實現無重新整理上傳頭像(或檔案)顯示進度

無重新整理上傳原理:現在我們利用新技術FormData表單資料物件可以實現快速收集表單資訊,普通表單域 和 上傳檔案域 均可以收集,再結合ajax就可以實現無重新整理上傳。 那麼怎樣顯示進度條呢?原來ajax物件有upload成員,該成員也是物件,構造器是XMLHttpR

原生JS實現ajax上傳檔案顯示進度

html程式碼 <progress id="progressbar" value="0" max="100" style="width:300px;"></progress>

多執行緒:C#.NET中使用BackgroundWorker在模態對話方塊中顯示進度

我們使用C#.NET編寫WinForm程式時,有時候為了實現在模態對話方塊中實時顯示後臺操作的進度,這個時候需要藉助於多執行緒操作在子窗體中顯示進度條狀態,在父窗體中進行後臺操作。你可以在Thread類中自己建立兩個執行緒以完成這個操作,不過C#.NET提供了Backgro

WebView 載入資料時顯示進度,載入完後再把進度取消顯示內容

轉載地址:http://blog.sina.com.cn/s/blog_7a66361301011a46.html webview 載入資料時顯示進度條有兩種. 第一種方法 這個是載入資料時顯示進度條 super.onCreate(savedInstanceState);

cp顯示進度

trap oms rom pri span 進度 pan 進度條 color #!/bin/bash trap ‘exit_fun‘ 2 usage(){ echo "Usage: `basename $0` \"src file\" \"ds

基於Jquery插件Uploadify實現實時顯示進度上傳圖片

準備 深入學習 pla 回調 true bar put and 分割 網址:http://www.jb51.net/article/83811.htm 這篇文章主要介紹了基於Jquery插件Uploadify實現實時顯示進度條上傳圖片的相關資料,感興趣的小夥伴們可

[轉]C#在WinForm下使用HttpWebRequest上傳文件顯示進度

res err 本地文件 pru .com end oid 設置 long /// <summary> /// 將本地文件上傳到指定的服務器(HttpWebRequest方法) /// </summary> /// <param name="a

delphi CopyFileProgressBar 拷貝文件顯示進度

items path adb sets sage app sts min ets CopyFileProgressBar(pwidechar(ListBox1.Items.Strings[I]),pwidechar(NewDir+‘\‘+ExtractFileName(L

js 文件異步上傳 顯示進度 顯示上傳速度 預覽文件

response null acc 文件的 pen 實現 accept https 提交 通常文件異步提交有幾個關鍵 1.支持拖拽放入文件。2.限制文件格式。3.預覽圖片文件。4.上傳進度,速度等,上傳途中取消上傳。5.數據與文件同時上傳 現在開始筆記: 需要一個最基礎的元

python 迴圈中顯示進度

import sys # 迴圈時顯示進度條 # total 代表迴圈總數 ,num為當前迴圈數 def view_bar(num, total): rate = float(num) / float(total) rate_num = int(rate * 100)

POI匯出資料並且實現匯出時顯示進度

js程式碼 /* 進度條隱藏 */                 function modalClose() {       

簡單的BackGroundWorker多執行緒時時重新整理UI介面,顯示進度

  BackGroundWorker是微軟提供的封裝好了的,非常實用的控制元件,我們可以在控制元件中將其拖到Winform之中,然後簡單的系統生成程式碼式的編輯事件處理。 以下是,比較經典且簡單的實用,後面的一篇較複雜,不使用微軟控制元件式,自行生成,並傳遞引數給多執行緒,並通過多

Python網路爬蟲之製作股票資料定向爬蟲 以及爬取的優化 可以顯示進度

候選網站: 新浪股票:http://finance.sina.com.cn/stock/ 百度股票:https://gupiao.baidu.com/stock/ 選取原則: 無robots協議 非js網頁 資料在HTMLK頁面中的 F12,檢視原始

.net匯入excel檔案到dataset

1.需要引入: using NPOI.HSSF.UserModel;using NPOI.SS.UserModel; //2007及以上版本XSSFWorkbook xWorkbook=new XSSFWorkbook(fileStream);//2003版本HSSFWorkbook hWorkbook=

asp.net匯入Excel

{                    float MaterialPrice =0.0f;                    float MaterialTaxPrice =0.0f;                    float TaxRate =0.0f;