亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于C#的Excel數(shù)據(jù)導(dǎo)入導(dǎo)出研究與實(shí)現(xiàn)

        2014-04-29 13:29:02蔡小艷

        蔡小艷

        摘 要:為了提高信息管理系統(tǒng)中數(shù)據(jù)導(dǎo)入導(dǎo)出操作的靈活性和通用性,本文詳細(xì)介紹了在Visual Studio 2008使用C#語(yǔ)言、通過(guò)引用Office的COM組件技術(shù),結(jié)合Microsoft SQL Server 2005實(shí)現(xiàn)了Excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)出到Excel的設(shè)計(jì)思路和實(shí)現(xiàn)方法。實(shí)踐證明該方法有較強(qiáng)的通用性和實(shí)用性。

        關(guān)鍵詞:C#;COM組件;Excel;導(dǎo)入導(dǎo)出

        中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-2163(2014)05-

        Research and Implementation of Excel Data Import and Export Based on C#

        CAI Xiaoyan, LI Longteng, GE Yu, ZHENG Yan

        (Wuhan ordnance officer school,Wuhan 430075,China)

        Abstract: In order to improve the flexibility and popularity of data import and export in information management system, this paper introduces the ideas and the ways of implementation of Excel data importing to database and database data exporting to Excel, which combined with Microsoft SQL Server 2005 in Visual Studio 2008, uses C# programme, and applies COM components technology of Office. The operation practices show that the method if widely useful and available.

        Key words: C#; COM components; Excel; import and export

        0 引 言

        Excel是Office的重要組成,是保存統(tǒng)計(jì)數(shù)據(jù)的常用軟件格式之一。在程序編制和數(shù)據(jù)匯總交換過(guò)程中,能否將系統(tǒng)中錄入的數(shù)據(jù)以及查詢(xún)的結(jié)果按標(biāo)準(zhǔn)的格式導(dǎo)出為Excel報(bào)表,以及能否將Excel表中的數(shù)據(jù)進(jìn)行整理后批量導(dǎo)入數(shù)據(jù)庫(kù),以上過(guò)程均對(duì)系統(tǒng)設(shè)計(jì)提出了較高要求?;诖?,本文即介紹了在.Net環(huán)境下,使用C#語(yǔ)言實(shí)現(xiàn)系統(tǒng)中Excel數(shù)據(jù)與SQL Server2005數(shù)據(jù)庫(kù)中數(shù)據(jù)的導(dǎo)入導(dǎo)出。

        1 設(shè)計(jì)思路

        1.1數(shù)據(jù)導(dǎo)入設(shè)計(jì)思路

        在此,將Excel表格中的數(shù)據(jù)導(dǎo)入到SQL Server數(shù)據(jù)庫(kù)的設(shè)計(jì)思路進(jìn)行如下表述:

        (1)由c#程序控制Excel表格,首先打開(kāi)Excel表格;

        (2)運(yùn)用SQL語(yǔ)句,執(zhí)行SQL,并根據(jù)不同的規(guī)則,將表格中的數(shù)據(jù)讀入到臨時(shí)表temp_table中;

        (3)通過(guò)對(duì)比temp_table和table,判斷是否存在重復(fù)的數(shù)據(jù),提示是否重復(fù)導(dǎo)入;

        (4)如果重復(fù)導(dǎo)入,可將temp_table的數(shù)據(jù)直接添加到table中;否則即需將temp_table中除關(guān)鍵字沖突外的其它數(shù)據(jù)添加到table中。

        1.2數(shù)據(jù)導(dǎo)出設(shè)計(jì)思路

        相應(yīng)地,SQL Server數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出到Excel表格的設(shè)計(jì)思路[1-3]可列述如下:

        (1)選擇需要導(dǎo)出的數(shù)據(jù);

        (2)利用Worksheet類(lèi)創(chuàng)建Excel工作表對(duì)象,確定即將寫(xiě)入數(shù)據(jù)的單元格位置;

        (3)從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),根據(jù)數(shù)據(jù)類(lèi)型的不同,選擇不同的寫(xiě)入方式;

        (4)保存Excel表格并退出內(nèi)存。

        數(shù)據(jù)批量導(dǎo)入和數(shù)據(jù)批量導(dǎo)出的設(shè)計(jì)流程可分別表示為如圖1和圖2所示。

        圖1 數(shù)據(jù)導(dǎo)入流程 圖2 數(shù)據(jù)導(dǎo)出流程

        Fig.1 Process of data import Fig.2 Process of data export

        2關(guān)鍵技術(shù)實(shí)現(xiàn)

        2.1數(shù)據(jù)導(dǎo)出

        2.1.1添加COM組件的引用

        只有添加Excel的COM組件才能在程序中調(diào)用Excel。添加COM組件的引用步驟可做如下實(shí)現(xiàn)[4]:

        在“解決方案資源管理器”窗口中右擊“引用”對(duì)象,并在彈出的快捷菜單中選擇“添加引用”;再在彈出的“添加引用”對(duì)話(huà)框中選擇“COM”選項(xiàng)卡,如果基于Excel 2003,則選擇“Microsoft Excel 11.0 object library”;如果基于Excel 2007,則選擇“Microsoft Excel 12.0 object library”;同時(shí)單擊“確定”按鈕,即將Excel對(duì)象引用到工程中。

        需要指出的是,在編碼中主要涉及以下兩種處理功能的類(lèi):

        (1) Microsoft.Office.Interop.Excel.Application:接口,表示一個(gè)Excel程序;

        (2) Microsoft.Office.Interop.Excel.Workbook:接口,表示一個(gè)Excel的工作薄。

        2.1.2 創(chuàng)建Excel表格

        微軟的Excel對(duì)象模型包括了數(shù)百個(gè)可供用戶(hù)交互的對(duì)象,本系統(tǒng)主要使用Application、Workbook、Worksheet和Range四個(gè)類(lèi)及其內(nèi)含成員。其中,Application對(duì)象處于Excel對(duì)象模型的頂層,表示整個(gè)Excel應(yīng)用程序;Workbook對(duì)象處于Application對(duì)象的下層,表示一個(gè)Excel工作薄文件;Worksheet對(duì)象包含于Workbook對(duì)象,表示一個(gè)Excel工作表;Range對(duì)象包含于worksheet對(duì)象之中,表示Excel工作表中的一個(gè)或多個(gè)單元格。

        創(chuàng)建Excel表格的代碼實(shí)現(xiàn)過(guò)程如下:

        Excel.Application excelApp = new Excel.Application(); //創(chuàng)建Excel對(duì)象

        Excel.Workbook wb = excelApp.Workbooks.Open(filename, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing); //創(chuàng)建Excel工作薄

        Excel.Worksheet ws = wb.Worksheets[1] as Excel.Worksheet; //引用工作表

        此時(shí)創(chuàng)建的Excel表格ws是一個(gè)沒(méi)有內(nèi)容的空表格,接下來(lái)將數(shù)據(jù)導(dǎo)出到該表格中。

        2.1.3 將數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)出到Excel

        (1)讀取數(shù)據(jù)表信息

        將指定的數(shù)據(jù)表中的數(shù)據(jù)讀取到DataSet中,具體步驟如下[5]:

        ①設(shè)置連接數(shù)據(jù)庫(kù)字符串;②設(shè)置查詢(xún)語(yǔ)句;③打開(kāi)數(shù)據(jù)庫(kù)連接,創(chuàng)建SQL數(shù)據(jù)適配器;④定義DataSet對(duì)象DS,填充數(shù)據(jù);⑤關(guān)閉數(shù)據(jù)庫(kù)連接。

        (2)向工作表的每個(gè)單元格寫(xiě)入數(shù)據(jù)

        工作表變量ws包含有一個(gè)“Cell”屬性,這個(gè)屬性代表Excel表格中的每一個(gè)單元格,通過(guò)對(duì)“Cell”屬性賦值,從而實(shí)現(xiàn)了向Excel表格寫(xiě)入相應(yīng)數(shù)據(jù)的設(shè)計(jì)需要。向Excel工作表寫(xiě)入數(shù)據(jù)的核心代碼如下:

        for (int i = 0; i < DS.Tables[0].Rows.Count; i++)

        {

        object rng = Type.Missing;

        start = 0;

        end = 0;

        this.InsertRows(ws, i + 5);//生成Excel文件時(shí)動(dòng)態(tài)添加行

        for (int j = 0; j < DS.Tables[0].Columns.Count; j++)

        {

        ws.Cells[i + 5, j + 1] = DS.Tables[0].Rows[i][j].ToString();

        }

        }

        private void InsertRows(Excel.Worksheet sheet, int rowIndex)

        {

        object missing = System.Reflection.Missing.Value;

        Excel.Range r = (Excel.Range)sheet.Rows[rowIndex,missing];

        r.Insert(Excel.XlInsertShiftDirection.xlShiftDown, missing);

        }

        2.1.4 保存Excel表格并退出內(nèi)存

        wb.Save(); //保存Excel文件

        excelApp.Quit(); //關(guān)閉Excel對(duì)象,回收資源

        2.2數(shù)據(jù)導(dǎo)入

        2.2.1 打開(kāi)Excel表格文件

        在讀取Excel表中數(shù)據(jù)時(shí),先是通過(guò)文件路徑得到Excel文件,并根據(jù)Workbook類(lèi)獲取workbook(工作簿),即可訪(fǎng)問(wèn)sheet(工作表)。對(duì)應(yīng)的實(shí)現(xiàn)代碼如下:

        Excel.Application excelApp = new Excel.Application();

        Excel.Workbook wb = excelApp.Workbooks.Open(textBox1.Text, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing);

        Excel.Worksheet ws = wb.Worksheets[1] as Excel.Worksheet;

        2.2.2 將Excel文件數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)臨時(shí)表

        通過(guò)SQL的Insert語(yǔ)句將Excel對(duì)象中的數(shù)據(jù)插入到指定的數(shù)據(jù)庫(kù)表中。該過(guò)程的詳細(xì)代碼實(shí)現(xiàn)為:

        for (int i = iStartRow; i <= iEndRow; i++)

        {

        sqlstr = "insert into temp_table (列1,列2…列n) values(";

        for (int j = 1; j <= iEndCol; j++)

        {

        if (((Excel.Range)ws.Cells[i, j]).Value2 == null)// 判斷導(dǎo)入的列值是否為空

        sqlstr += ",null";

        else

        {

        if (j == 1) //導(dǎo)入第一列值

        {

        sqlstr += "'" + ((Excel.Range)ws.Cells[i, j]).Value2.ToString() + "'";

        }

        else

        sqlstr += ",'" + ((Excel.Range)ws.Cells[i, j]).Value2.ToString() + "'";

        }

        }

        sqlstr = sqlstr + ")";

        執(zhí)行sql語(yǔ)句

        }

        2.2.3 將臨時(shí)表中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)

        在進(jìn)行插入數(shù)據(jù)庫(kù)操作前,將需要判斷插入的數(shù)據(jù)是否有重復(fù),如果重復(fù),則覆蓋原數(shù)據(jù)庫(kù)中數(shù)據(jù)。判斷的標(biāo)準(zhǔn),可視數(shù)據(jù)庫(kù)表中主鍵列數(shù)據(jù)與導(dǎo)入到臨時(shí)表中對(duì)應(yīng)的數(shù)據(jù)是否相同而定。一旦相同,即刪除臨時(shí)表中對(duì)應(yīng)行數(shù)據(jù),再將臨時(shí)表中剩余的數(shù)據(jù)插入到指定表;反之,一旦如果不同,即直接進(jìn)行數(shù)據(jù)導(dǎo)入。其程序?qū)崿F(xiàn)過(guò)程可表述為:

        DataSet ds = mydataclass1.getDataSet("select * from temp_table where 主關(guān)鍵字 in (select 主關(guān)鍵字 from table) ");

        if (ds.Tables[0].Rows.Count > 0) //存在重復(fù)的數(shù)據(jù)

        {

        string querystr = "導(dǎo)入數(shù)據(jù)中有" + ds.Tables[0].Rows.Count + "條數(shù)據(jù)與數(shù)據(jù)庫(kù)中已有數(shù)據(jù)重復(fù),是否覆蓋導(dǎo)入?";

        if (MessageBox.Show(querystr, "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information).ToString() == "Yes")

        {

        string delsql = "delete from temp_table from temp_table join table on

        temp_table.主關(guān)鍵字=table.主關(guān)鍵字 ";

        執(zhí)行delsql語(yǔ)句;

        }

        else

        {

        dataGridView1.DataSource = ds.Tables[0];//顯示重復(fù)數(shù)據(jù)

        dataGridView1.Visible = true;

        dataGridView1.BringToFront();

        btnBrowse.Enabled = false;

        return ;

        }

        }

        string inssql = @"insert into table select * from temp_table";

        執(zhí)行inssql語(yǔ)句;

        3 結(jié)束語(yǔ)

        本文提出了如下的研究創(chuàng)新,具體可表述為:本文采用Visual Studio開(kāi)發(fā)平臺(tái),運(yùn)用基于Office的COM組件技術(shù),結(jié)合Microsoft SQL Server 2005實(shí)現(xiàn)了Excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)表以及數(shù)據(jù)庫(kù)表數(shù)據(jù)導(dǎo)出到Excel。在導(dǎo)入Excel數(shù)據(jù)文件時(shí),能實(shí)現(xiàn)覆蓋導(dǎo)入;而在導(dǎo)出Excel數(shù)據(jù)文件時(shí),則能動(dòng)態(tài)添加行,這種批量的導(dǎo)入導(dǎo)出數(shù)據(jù)能夠提高用戶(hù)的工作效率。從應(yīng)用情況看,該種Excel數(shù)據(jù)導(dǎo)入導(dǎo)出方法通用性強(qiáng),效果理想,值得推廣。

        參考文獻(xiàn):

        [1]李明明. VS.net中用后臺(tái)線(xiàn)程向Excel中導(dǎo)入數(shù)據(jù)的研究[J]. 測(cè)控技術(shù),2011,30(8):83-86.

        [2]蘇慶,李忠良,吳偉民.在C#.NET下實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入Excel的方法研究[J]. 計(jì)算機(jī)與現(xiàn)代化,2011(4):29-31.

        [3]王森. 基于C#的Excel文檔導(dǎo)入技術(shù)的研究與實(shí)現(xiàn)[J]. 辦公自動(dòng)化,2011(16):54-55.

        [4]樊宇. 利用COM組件將SQL Server中的數(shù)據(jù)導(dǎo)入到Excel[J]. 電腦編程技巧與維護(hù),2009(20):65-66.

        [5]王晟. Visual C#.NET數(shù)據(jù)庫(kù)開(kāi)發(fā)經(jīng)典案例解析[M]. 北京:清華大學(xué)出版社,2010.

        久久精品无码专区东京热| 久久精品夜色国产亚洲av| 国产亚洲精品久久久久久| 麻豆久久五月国产综合| 精品一区二区三区女同免费| 国产亚洲精品视频一区二区三区| 和黑人邻居中文字幕在线 | 69sex久久精品国产麻豆| 911精品国产91久久久久| 亚洲av网一区天堂福利| 狼人伊人影院在线观看国产| 久久久久久久波多野结衣高潮| 亚洲av无码成人yellow| 国产男女猛烈无遮挡免费视频网址| 91成人黄色蘑菇视频| 一本色道久久88精品综合| 国产欧美成人| 国产av一区仑乱久久精品| 丁香五月缴情在线| 国产性生交xxxxx免费| 丰满人妻无套中出中文字幕| 亚洲女人毛茸茸的视频| 国产又猛又黄又爽| 亚洲av成人精品日韩一区| 中文字幕麻豆一区二区| av免费不卡一区二区| 午夜无码伦费影视在线观看| 国产片AV在线永久免费观看| 国产成人亚洲精品一区二区三区 | 久久亚洲中文字幕无码| 精品国产爱在线观看| 亚洲国产女性内射第一区二区 | 亚洲精品成人网站在线观看| 九月色婷婷免费| 国产av一级片在线观看| 无码人妻av一二区二区三区| 日本手机在线| 国产内射一级一片内射高清视频1| 精品亚洲国产成人| 91av国产视频| 中文字幕亚洲视频三区|