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.

主站蜘蛛池模板: 婷婷六月综合网| 国产日韩欧美视频| 一级片免费网站| 亚洲日韩日本中文在线| 久久特级毛片| 久久人人97超碰人人澡爱香蕉| 欧美亚洲国产视频| 美女无遮挡免费视频网站| 成人国产精品网站在线看| 国产成人区在线观看视频| 国产成人福利在线视老湿机| 亚洲男人在线天堂| 国产精品护士| 国产精品男人的天堂| 國產尤物AV尤物在線觀看| 伊人欧美在线| 97精品久久久大香线焦| 亚洲人人视频| 中文字幕在线看视频一区二区三区| 亚洲精品高清视频| 亚洲三级色| 国产全黄a一级毛片| 99精品一区二区免费视频| 午夜免费小视频| 男女精品视频| av大片在线无码免费| 中文国产成人精品久久| 手机成人午夜在线视频| 99视频全部免费| 久久久久久尹人网香蕉| a级毛片网| 精品国产免费观看| 国产真实自在自线免费精品| 亚洲欧美成aⅴ人在线观看| 夜夜拍夜夜爽| 九色在线观看视频| 99r在线精品视频在线播放| 欧美一区二区自偷自拍视频| 伊人色在线视频| 色综合久久久久8天国| a毛片在线| 亚洲国产精品日韩av专区| 亚洲精品中文字幕无乱码| 亚洲综合天堂网| 中文字幕在线播放不卡| 国产精品亚洲一区二区三区z| 亚洲伊人久久精品影院| av在线无码浏览| 亚洲精品爱草草视频在线| 国产视频久久久久| 欧美视频在线不卡| A级毛片无码久久精品免费| 亚洲国产成人精品青青草原| 久久天天躁狠狠躁夜夜躁| 欧美a在线视频| 国产成人综合网| 亚洲男人天堂2018| a级免费视频| 伊在人亞洲香蕉精品區| 国产拍揄自揄精品视频网站| 亚洲中文无码h在线观看| 国产欧美精品专区一区二区| 高清视频一区| 国产精品永久久久久| 99久久人妻精品免费二区| 亚洲综合极品香蕉久久网| 乱人伦中文视频在线观看免费| 亚洲中久无码永久在线观看软件| 欧美精品亚洲日韩a| 老熟妇喷水一区二区三区| 亚洲男人天堂网址| 九九九国产| 久久国产精品夜色| 夜夜操国产| 久久精品国产国语对白| 欧美区一区二区三| 伊人久久婷婷五月综合97色| 波多野结衣视频网站| 亚洲国产精品不卡在线| 亚洲男人天堂2020| 欧美亚洲综合免费精品高清在线观看| 欧美成人综合视频|