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

基于C#的OLEDB和COM組件對Excel文件操作

2014-02-23 09:18:54陳洪磊施秋萍
大眾科技 2014年6期
關鍵詞:數據庫

陳洪磊 施秋萍

(普洱學院,云南 普洱 665000)

1 引言

C#,稱為C sharp,是C和C++語言的一種升級計算編程語言,由是微軟公司退出的一種基于.NET框架的高級程序設計語言。C#是面向對象的編程語言,易于學習,使得程序員可以快速地編寫各種.NET平臺的應用程序。

Excel也是微軟公司推出的Office辦公套件中的一個處理表格的專業軟件,也是當今最流行的辦公表格處理軟件[1]。

基于 C#對 Excel的專用應用程序可以大大提高工作效率,本文主要介紹兩種常用C#操作Excel方法:COM組件操作法和OLEDB操作法。對于Excel最基本的操作包括:創建Excel文件,對Excel文檔的保存、讀寫、刪除、添加、查找,本文主要通過這些基本操作對兩種操作方式的利弊進行了實驗比較。

2 COM組件操作法

COM組件是微軟公司開發的一種軟件開發技術,我們狹義上可以把它理解為一個功能強大的微軟API,當然它的所含的概念遠遠超過API。由于Excel也是由微軟公司開發的,所以COM組件中也提供了對Excel操作的一些對象,其中最重要的四個對象為Application,Workbook,Worksheet和Range對象[2]。

當打開一個Excel文檔的時候就創建了一個Application對象,可以理解為只要運行 Excel程序就創建了一個Application對象。如圖1所示,一個Application中包含了很多個Workbook(Workbooks),這就相當于Excel文件可以同時打開很多個工作?。╓orkbooks),其中的一個就是Workbook,在一個Workbook中又包含了很多工作表(Worksheets),其中一個就成為Worksheet。在圖1 的結構圖中,最后一個對象Range表示一個工作表(Workbook)中單元格的使用范圍[3][4]。

圖1 Excel對象層級結構

2.1 創建與保存Excel文檔

本文中的編程環境是Visual Studio 2010,在創建Excel文檔是首先要添加Excel的COM組件,即在項目中添加引用“Microsoft Excel 15.0 Object Library”,這里要特別注意,由于Office辦公套件有很多版本,所以添加引用時也有很多的版本,有些較老的版本是不支持較新的Office文件,通常最好添加新版本的COM組件[5]。

首先使用命名空間:using Excel=Microsoft.Office.Interop.Excel;

Excel.Application NewExcel = new Excel.Application();//新建一個Excel進程

NewExcel.Application.Workbooks.Add (true );//在Excel文件中創建一個工作薄

通過以上就可以簡單的創建一個空白的Excel文件,通常情況可以通過Visible屬性來設置創建的Excel文件可見性,NewExcel.Visible=false這里設置Excel為不可見。

以上創建空白的Excel后就要對新建文檔進行保存,這里使用SaveAs方法:

NewExcel.SaveAs(filename,Missing.Value,Missing.Value,Missi ng.Value,Missing.Value,Missing.Value,Excel.XlSaveAsAccessMo de.xlNoChange,Missing.Value,Missing.Value,Missing.Val ue,Missing.Value, Missing.Value);

SaveAs方法中有很多參數,這里我們主要關心其中的filename參數,其作用是要保存的文件名。可包含完整路徑。如果不指定路徑,文件保存到當前文件夾中。其他的參數設置一般使用默認方式,詳細了解可以通過微軟官方MSDN網站[1]。

2.2 寫入與讀取數據

2.2.1 寫入數據

在創建一個新的工作薄后,可以直接使用“Cells”對新建的Excel賦值,具體代碼如下:

NewExcel.Cells[1,1]=”第一行第一列”;

NewExcel.Cells[1,2]=”第一行第二列”;

這里的行列號是從1開始排列,不是從0開始。

2.2.2 讀取數據

讀取數據相對于寫入數據較為復雜,通常要讀取數據首先要打開有數據的 Excel文檔,這里使用 COM組件的 Open方法打開一個Excel文檔:

Excel.Workbook NewWorkbook = NewExcel.Workbooks.Open(FilePath, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing);

這里使用Application新建一個Excel進程,然后在此基礎上創建一個新的工作薄NewWorkbook,打開的Excel文檔就要導入到這里工作薄中。在Open方法中有很多的參數,通常我們主要關注FilePath,這個參數就是要打開的文件路徑[6]。

接下來還要創建一個新的工作表(Worksheet),在工作表的基礎上在創建Range對象,數據的讀取就是通過Range對象完成的,具體過程如下:

Excel.Worksheet

NewSheet=(Excel.Worksheet)NewWorkbook. Sheets[1];//在工作薄中創建一個工作表

Excel.Range range= (Excel.Range)NewSheet.Cells[2,2];//這里是把工作表中的第二行第二列轉換為Range對象,并賦值給range。

得到Range對象后可以使用Text或者Value2等屬性得到里面的數據。

當數據寫入完成后要使用 NewWorkbook.Save()或者NewWorkbook.SaveAs()進行保存,最后在使用NewWorkbook.Close()關閉工作薄。

2.3 刪除數據

在Excel中刪除數據主要使用Range對象。

Excel.Range range= NewSheet.get_Range(”A1”,”H1”);//”A1”和”H1”是要刪除表格的范圍

Range.Delete(Type.Missing);// “Type.Missing”表示缺省值

在實際情況中,經常用到整行、整列的刪除,在COM組件中也提供這種刪除方法。

刪除整行:

Excel.Range range = (Excel.Range) NewSheet.Rows[1,Missing.Value];//把工作表中的要刪除的行賦值給 range對象,這里是第一行。

range.EntireRow.Delete(Excel.XlDeleteShiftDirect ion.xlShiftUp);//調用range對象的EntireRow表示整行,Delete表示刪除里面的參數表示刪除后下方單元格向上移動。

刪除整列:

Excel.Range range = (Excel.Range) NewSheet.Columns[1, Missing.Value];//把工作表中的要刪除的列賦值給range對象,這里是第一列。

range.EntireColumn.Delete(Excel.XlDeleteShiftDir ection.xlShiftToLeft);//調用range對象的EntireColumn表示整列,Delete表示刪除里面的參數表示刪除后右邊單元格向左移動[6]。

2.4 增加數據

Excel表格增加數據主要就是指增加行或者列,其操作方式與刪除方式類似。

增加行:

Excel.Range range = (Excel.Range)NewSheet.Rows[2,Missing.Value];//獲取要插入的行號,并轉換為 Range對象,這里是要插入第二行。

range.Insert(Missing.Value,Excel.XlInsertFormatO rigin.xlFormatFromLeftOrAbove);//在 Excel表格中的第一行后插入一個空的第二行,Insert的第二個參數表示插入后,其他單元格移動方向。

增加列:

Excel.Range range = (Excel.Range)NewSheet. Columns[2, Missing.Value];//獲取要插入的列號,并轉換為Range對象,這里是要插入第二列。

range.Insert (Missing.Value, Excel.XlInsertShiftDirection.xlShiftToRight); //在 Excel表格中的第一列后插入一個空的第二列,Insert的第二個參數表示插入后,其他單元格移動方向[7]。

2.5 查找

查找也是Excel文檔中十分重要的一個功能,下面是在一個工作表中的查找代碼:

Excel.Range range = ((Excel.Range)NewSheet. UsedRange).Find("查找關鍵字", Missing.Value, Missing.Value,Missing.Value, Missing.Value, Excel.XlSearchDirection.xlNext,Missing.Value, Missing.Value, Missing.Value);

NewSheet.UsedRange:表示當前工作表里所有使用的單元格區域組成的Range對象;

Find方法:方法中有很多個參數,主要有兩個參數必須要設置,第一個是要查找的關鍵字,另一個是 Excel.XlSearchDirection表示查詢的方向有兩個枚舉數值:xlNext向下查找和xlPrevious向前查找[7][8]。

3 OLEDB操作法

OLEDB是微軟公司退出的針對不同的數據源的應用程序接口,也可以理解為OLEDB是一個數據庫的接口,程序可以通過 OLEDB連接到數據庫。這就說明 OLEDB操作法就是把Excel文件當作一個數據庫進行操作,這也就使得OLEDB操作法不能直接創建空白的Excel文件,這能向操作數據庫一樣連接一個已存在的一個Excel文檔。但是同時Excel本身并不是一個真正的數據庫文件,所以在 OLEDB中并不能對Excel文檔執行Delete刪除命令。

OLEDB操作Excel一般要通過C#自身的DataSet對象。DataSet為方便數據處理開發出來的,是數據的集合,正是因為使用DataSet,才使得數據操作簡單、高效。

首先要創建連接:

string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=0'";

這是連接字符串,其中 filepath是要連接的 Excel文件路徑。

“Microsoft.ACE.OLEDB.12.0”是連接Excel對象的接口引擎,較早的版本是“Microsoft.Jet.OLEDB.4.0”現在很少使用,如果程序出現連接方面的錯誤可以互相更換。

“Excel 12.0”表示Excel版本號,如果你的Excel是97年以前的版本要使用Excel 8.0。

“HDR” 表示第一行是否是標題行。

“IMEX”有三種模式,分別有0、1、2表示,“0”時Excel文檔能夠進行寫入操作;“1”時Excel文檔能夠進行讀取操作;“2”時Excel文檔可以同時只進行讀寫操作。

3.1 OLEDB讀寫Excel文檔

3.1.1 讀取數據

OleDbConnection conn = new OleDbConnection(strConn); //創建連接

conn.Open();

string strExcel = "select * from [sheet1$]";//使用SQL語句讀取Excel文檔中名為sheet1的工作表

OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);//執行SQL語句

DataSet ds = new DataSet();

DataTable dt = new DataTable ();

ds.Tables.Add(dt);//把新建的 DataTable加入到DataSet中

myCommand.Fill(dt);//Excel文檔中的內容導入到了dt表中

conn.Close();

執行上面的程序后 Excel文檔的內容已經讀入到了 dt中,這里要說明下,DataSet中可以包含很多個DataTable,這種關系類似與Excel中工作薄和工作表的關系[8]。

3.1.2 寫入數據

這里對數據的操作有兩種方法,一種是直接使用SQL語句操作Excel表格數據;另一種方法就是操作DataSet中讀入的數據,操作全部完成后在一次更新到Excel文檔中。由于直接使用SQL語句直接操作Excel文檔效率較低,所以本文主要介紹操作DataSet,再更新到Excel文檔中的方法[8]。

DataRow NewRow = dt.NewRow();//在dt表格中新建一行數據

NewRow ["序號"]= "3";//賦值給“序號”字段

NewRow ["姓名"]= "張三";//賦值給“姓名”字段

NewRow ["學號"]= "201401001";//賦值給“學號”字段

dt.Rows.Add(NewRow);//確認插入新建的一行數據

以上增加 dt表格中的數據,接下來要把數據更新到Excel文檔中:

OleDbCommandBuilder odcb=new OleDbCommandBuilder(myCommand);

odcb.QuotePrefix = "[";

odcb.QuoteSuffix = "]";//用于糾正 INSERT INTO 語句的語法錯誤

myCommand.Update(dt);//更新dt數據到Excel文檔中

3.2 查找數據

查找數據只要使用DataTable中的Find方法。

DataRow keyword = dt.Rows.Find("張三");//查找 dt表中有關“張三”數據

4 總結與討論

本文主要介紹了COM組件和OLEDB兩種方法操作Excel文檔的基本方法。從上面的內容可以看到OLEDB的操作比COM組件的操作功能少了很多,主要是因為OLEDB把Excel文檔作為一個數據庫進行處理,對數據庫處理有一定限制,比如不能隨意改變數據庫的結構,這就是為什么OLEDB中不能添加或者刪除列;而COM組件的操作就靈活多變,基本上可以實現Excel文檔操作中的所有功能,除了以上介紹的基本功能,還可以設置字體、改變顏色、設置單元格大小等;但是COM組件的操作效率較低,執行的速度遠遠低于OLEDB法,一個簡單的查找操作可能要比OLEDB操作的時間長10倍,COM組件法還有個非常麻煩的問題,每次操作完成后必須要手動把運行的Excel進程關閉,如果不關閉會影響后續對Excel文檔的處理。

最后總結,在實際編程過程中,我們可以同時使用兩種方法,發揮各自的優點,這樣才能最大限度的提高程序的效率。

[1]微軟公司. Microsoft Visual Studio.Net [Z].微軟公司,2003.

[2]Ted Faison. Visual C# 基于組件的開發[M].北京:清華大學出版社, 2003.

[3]李建忠. Microsoft .NET框架程序設計[M].武漢:華中科技大學出版社, 2004.

[4]杜成龍.ASP.NET實現通用查詢方式[J].教育信息化,2005,(7): 77-78.

[5]張文博,余文芳.ASP.NET編程中對Excel文檔操作的探討及應用[J].計算機系統應用,2010,(3): 187-189.

[6]陳志堅. ASP.NET中Excel文檔的處理[J].寧波職業技術學院學報,2010,(5): 60-62.

[7]王興,李菊,陳瑋. ASP.NET中Excel文檔生成技術研究[J].軟件導刊. 2010,(4): 130-131.

[8]張立君,王維國.基干ASP.NET與ADO.NET技術訪問數據庫[J].商丘職業技術學院學報,2008,(5): 29-31.

猜你喜歡
數據庫
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
兩種新的非確定數據庫上的Top-K查詢
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
數據庫
財經(2015年3期)2015-06-09 17:41:31
數據庫
財經(2014年21期)2014-08-18 01:50:18
數據庫
財經(2014年6期)2014-03-12 08:28:19
數據庫
財經(2013年6期)2013-04-29 17:59:30
主站蜘蛛池模板: 九九九精品成人免费视频7| 国产午夜人做人免费视频中文 | 亚洲欧美日韩另类在线一| 国产无码精品在线播放| 亚洲色欲色欲www网| 最近最新中文字幕在线第一页| 亚洲男人的天堂在线观看| 午夜福利在线观看成人| 日本手机在线视频| 日本欧美一二三区色视频| 992Tv视频国产精品| 九九九国产| 亚洲欧美日韩另类| 日韩成人在线视频| 久久久精品无码一区二区三区| 另类专区亚洲| 午夜国产理论| 毛片大全免费观看| 激情六月丁香婷婷| 亚洲欧美一区在线| 99久久国产综合精品2020| 亚洲天天更新| 尤物在线观看乱码| 国产精品无码AV片在线观看播放| 欧美影院久久| 91久久青青草原精品国产| 久久精品无码一区二区日韩免费| 亚洲国产精品无码AV| 国产美女91视频| 91精品国产91欠久久久久| 青草娱乐极品免费视频| 亚洲欧美日韩高清综合678| 日韩欧美网址| 黄色网在线免费观看| www.91在线播放| 91视频日本| 国产一级二级在线观看| 日韩精品亚洲一区中文字幕| 国产黄网永久免费| 成人a免费α片在线视频网站| 久久a毛片| 国产成人亚洲无码淙合青草| 中文字幕 日韩 欧美| 国产jizzjizz视频| 国产男女免费完整版视频| 国产欧美日韩视频怡春院| 热久久这里是精品6免费观看| 九色综合伊人久久富二代| 国产青青草视频| 国产美女精品一区二区| 99热这里只有精品免费国产| 久久亚洲国产视频| 久久免费观看视频| 色亚洲激情综合精品无码视频| 国产美女91视频| 精品国产香蕉伊思人在线| 9啪在线视频| a网站在线观看| 国产乱肥老妇精品视频| www亚洲精品| 国产丝袜一区二区三区视频免下载| 成年人国产网站| 国产哺乳奶水91在线播放| 国产黑丝视频在线观看| 欧美日韩一区二区三| 孕妇高潮太爽了在线观看免费| 干中文字幕| 欧洲欧美人成免费全部视频| 亚洲国产精品一区二区高清无码久久| 久久精品国产91久久综合麻豆自制 | 黄色a一级视频| 中文字幕 91| 亚洲天堂高清| 欧美亚洲日韩不卡在线在线观看| 国产精品伦视频观看免费| 国产黄色视频综合| 五月婷婷导航| 亚洲色无码专线精品观看| 国产精品嫩草影院av | 日韩视频福利| 午夜久久影院| 中文字幕一区二区人妻电影|