999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C#的Excel數據導入導出研究與實現

2014-04-29 13:29:02蔡小艷
智能計算機與應用 2014年5期

蔡小艷

摘 要:為了提高信息管理系統中數據導入導出操作的靈活性和通用性,本文詳細介紹了在Visual Studio 2008使用C#語言、通過引用Office的COM組件技術,結合Microsoft SQL Server 2005實現了Excel數據導入到數據庫以及數據庫數據導出到Excel的設計思路和實現方法。實踐證明該方法有較強的通用性和實用性。

關鍵詞:C#;COM組件;Excel;導入導出

中圖分類號:TP311 文獻標識碼:A 文章編號: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的重要組成,是保存統計數據的常用軟件格式之一。在程序編制和數據匯總交換過程中,能否將系統中錄入的數據以及查詢的結果按標準的格式導出為Excel報表,以及能否將Excel表中的數據進行整理后批量導入數據庫,以上過程均對系統設計提出了較高要求。基于此,本文即介紹了在.Net環境下,使用C#語言實現系統中Excel數據與SQL Server2005數據庫中數據的導入導出。

1 設計思路

1.1數據導入設計思路

在此,將Excel表格中的數據導入到SQL Server數據庫的設計思路進行如下表述:

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

(2)運用SQL語句,執行SQL,并根據不同的規則,將表格中的數據讀入到臨時表temp_table中;

(3)通過對比temp_table和table,判斷是否存在重復的數據,提示是否重復導入;

(4)如果重復導入,可將temp_table的數據直接添加到table中;否則即需將temp_table中除關鍵字沖突外的其它數據添加到table中。

1.2數據導出設計思路

相應地,SQL Server數據庫中的數據導出到Excel表格的設計思路[1-3]可列述如下:

(1)選擇需要導出的數據;

(2)利用Worksheet類創建Excel工作表對象,確定即將寫入數據的單元格位置;

(3)從數據庫中讀取數據,根據數據類型的不同,選擇不同的寫入方式;

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

數據批量導入和數據批量導出的設計流程可分別表示為如圖1和圖2所示。

圖1 數據導入流程 圖2 數據導出流程

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

2關鍵技術實現

2.1數據導出

2.1.1添加COM組件的引用

只有添加Excel的COM組件才能在程序中調用Excel。添加COM組件的引用步驟可做如下實現[4]:

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

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

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

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

2.1.2 創建Excel表格

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

創建Excel表格的代碼實現過程如下:

Excel.Application excelApp = new Excel.Application(); //創建Excel對象

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

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

此時創建的Excel表格ws是一個沒有內容的空表格,接下來將數據導出到該表格中。

2.1.3 將數據庫數據導出到Excel

(1)讀取數據表信息

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

①設置連接數據庫字符串;②設置查詢語句;③打開數據庫連接,創建SQL數據適配器;④定義DataSet對象DS,填充數據;⑤關閉數據庫連接。

(2)向工作表的每個單元格寫入數據

工作表變量ws包含有一個“Cell”屬性,這個屬性代表Excel表格中的每一個單元格,通過對“Cell”屬性賦值,從而實現了向Excel表格寫入相應數據的設計需要。向Excel工作表寫入數據的核心代碼如下:

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文件時動態添加行

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表格并退出內存

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

excelApp.Quit(); //關閉Excel對象,回收資源

2.2數據導入

2.2.1 打開Excel表格文件

在讀取Excel表中數據時,先是通過文件路徑得到Excel文件,并根據Workbook類獲取workbook(工作簿),即可訪問sheet(工作表)。對應的實現代碼如下:

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文件數據導入到數據庫臨時表

通過SQL的Insert語句將Excel對象中的數據插入到指定的數據庫表中。該過程的詳細代碼實現為:

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)// 判斷導入的列值是否為空

sqlstr += ",null";

else

{

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

{

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

}

else

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

}

}

sqlstr = sqlstr + ")";

執行sql語句

}

2.2.3 將臨時表中的數據導入數據庫

在進行插入數據庫操作前,將需要判斷插入的數據是否有重復,如果重復,則覆蓋原數據庫中數據。判斷的標準,可視數據庫表中主鍵列數據與導入到臨時表中對應的數據是否相同而定。一旦相同,即刪除臨時表中對應行數據,再將臨時表中剩余的數據插入到指定表;反之,一旦如果不同,即直接進行數據導入。其程序實現過程可表述為:

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

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

{

string querystr = "導入數據中有" + ds.Tables[0].Rows.Count + "條數據與數據庫中已有數據重復,是否覆蓋導入?";

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

{

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

temp_table.主關鍵字=table.主關鍵字 ";

執行delsql語句;

}

else

{

dataGridView1.DataSource = ds.Tables[0];//顯示重復數據

dataGridView1.Visible = true;

dataGridView1.BringToFront();

btnBrowse.Enabled = false;

return ;

}

}

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

執行inssql語句;

3 結束語

本文提出了如下的研究創新,具體可表述為:本文采用Visual Studio開發平臺,運用基于Office的COM組件技術,結合Microsoft SQL Server 2005實現了Excel數據導入到數據庫表以及數據庫表數據導出到Excel。在導入Excel數據文件時,能實現覆蓋導入;而在導出Excel數據文件時,則能動態添加行,這種批量的導入導出數據能夠提高用戶的工作效率。從應用情況看,該種Excel數據導入導出方法通用性強,效果理想,值得推廣。

參考文獻:

[1]李明明. VS.net中用后臺線程向Excel中導入數據的研究[J]. 測控技術,2011,30(8):83-86.

[2]蘇慶,李忠良,吳偉民.在C#.NET下實現數據導入Excel的方法研究[J]. 計算機與現代化,2011(4):29-31.

[3]王森. 基于C#的Excel文檔導入技術的研究與實現[J]. 辦公自動化,2011(16):54-55.

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

[5]王晟. Visual C#.NET數據庫開發經典案例解析[M]. 北京:清華大學出版社,2010.

主站蜘蛛池模板: 欧美亚洲一二三区| 亚洲天堂网2014| 日韩在线网址| 久青草国产高清在线视频| 国产成人福利在线| 色偷偷一区二区三区| 国产va免费精品| 亚洲欧洲免费视频| 欧美一级高清视频在线播放| 粉嫩国产白浆在线观看| 国产成人三级| 午夜无码一区二区三区| 无码又爽又刺激的高潮视频| 国产另类乱子伦精品免费女| 久久国产高潮流白浆免费观看| 免费在线国产一区二区三区精品 | 日韩在线2020专区| 国产网站免费观看| 伊人久久青草青青综合| 午夜精品影院| 欧美在线导航| 99热国产这里只有精品无卡顿"| 国产69精品久久久久孕妇大杂乱 | 久久精品亚洲专区| 色播五月婷婷| 国产黄视频网站| 综合社区亚洲熟妇p| 丰满少妇αⅴ无码区| 日韩午夜伦| 蜜桃臀无码内射一区二区三区| 在线中文字幕日韩| 成人免费视频一区| 中文毛片无遮挡播放免费| 亚洲一区二区日韩欧美gif| 日韩精品无码免费一区二区三区| 色综合成人| 91精品国产福利| 国产欧美日韩综合在线第一| 制服丝袜 91视频| 一级毛片免费高清视频| 色吊丝av中文字幕| 特级aaaaaaaaa毛片免费视频 | 久久精品人妻中文系列| 亚洲第一区欧美国产综合 | 久久精品中文无码资源站| 日韩在线成年视频人网站观看| 美女裸体18禁网站| 综合网久久| 国产精品高清国产三级囯产AV| 黄色网在线| 日韩无码一二三区| 国产一级毛片在线| 成人午夜免费观看| www.youjizz.com久久| 国产在线观看第二页| 五月婷婷亚洲综合| 手机在线免费不卡一区二| 久久精品最新免费国产成人| 欧美性精品不卡在线观看| 久久中文字幕不卡一二区| 青青草原国产av福利网站| 青青操国产| 狠狠色狠狠色综合久久第一次| 精品成人一区二区三区电影| 国产成人高清在线精品| 97久久精品人人做人人爽| 亚洲毛片在线看| 欧美在线天堂| 日韩大片免费观看视频播放| 四虎成人免费毛片| 国产成人AV综合久久| 亚洲欧洲自拍拍偷午夜色| 午夜国产大片免费观看| 亚洲人在线| 欧美在线精品怡红院| 国产精品久久国产精麻豆99网站| 亚洲无码视频喷水| 亚洲色图欧美一区| 露脸真实国语乱在线观看| 亚洲中文字幕97久久精品少妇| 青草国产在线视频| 韩国福利一区|