(轉)C#操作Excel(創建、打開、讀寫、保存)幾種方法的總結


 

原文鏈接:http://hi.baidu.com/seni2007/blog/item/3f9d19015877510b728da574.html

 

前言

      在.NET開發中,不管是web程序還是桌面軟件(尤其是
涉及數據庫操作的MIS系統等),常常需操作Excel,如導出數據到Excel,讀取Excel中數據到程序中等。總結起來,其操作不外乎創建、打開、讀寫、保存(后退出/釋放),而其操作方法,則主要有: 通過ADO.NET數據連接方式通過Excel對象模型“自動化”操作 使用中間數據格式如文本文件,XML等間接操作Excel使用第三方控件(主要用於向Excel傳輸數據)等。

在開始討論之前,先把相關的一些網上資源羅列一下,其中大部分來自MSDN:

MSDN: 如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿傳輸數據
http://support.microsoft.com/kb/306023/zh-cn

MSDN: 從 .NET 開發人員的角度理解 Excel 對象模型 
http://msdn.microsoft.com/zh-cn/library/aa168292(office.11).aspx

如何:使用 COM Interop 創建 Excel 電子表格(C# 編程指南)
http://msdn.microsoft.com/zh-cn/library/ms173186(VS.80).aspx

Office XP 主互操作程序集入門
http://msdn.microsoft.com/zh-cn/library/aa201322(office.11).aspx

如何通過 Visual C# 使 Excel 自動執行操作以使用數組來填充或獲取某區域中的數據
http://support.microsoft.com/kb/302096/zh-cn

如何在 Microsoft Visual C# .NET 中實現 Microsoft Excel 自動化
http://support.microsoft.com/kb/302084/zh-cn

如何使用 Visual C# .NET 處理 Excel 事件
http://support.microsoft.com/kb/823981/zh-cn

C#中創建、打開、讀取、寫入、保存Excel的一般性代碼
http://hi.baidu.com/zhaochenbo/blog/item/f6d70ff7bf32fa2a730eec39.html

如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查詢和顯示 Excel 數據
http://support.microsoft.com/kb/306572/zh-cn

在 Visual C#.NET 中使用 GetOleDbSchemaTable 從 Excel 如何: 檢索元數據
http://support.microsoft.com/kb/318452/zh-cn

與 XML 一起使用 Visual Basic 和 ASP 生成 Excel 2003 工作簿
http://msdn.microsoft.com/zh-cn/library/aa203722(office.11).aspx


下面開始就各種方法逐步說明其具體的Excel操作過程:


1.通過ADO.NET數據庫連接方式

Microsoft Jet 提供程序用於連接到 Excel 工作簿。在以下連接字符串中,Extended Properties 關鍵字設置 Excel 特定的屬性。“HDR=Yes;”指示第一行中包含列名,而不是數據,“IMEX=1;”通知驅動程序始終將“互混”數據列作為文本讀取。Excel 8.0 針對Excel2000及以上版本,Excel5.0 針對Excel97。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""

注意,Extended Properties 所需的雙引號必須還要加雙引號。

使用ADO.NET打開、讀取並關閉代碼示例如下:
using System.Data.OleDb;
using System.Data;

String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:/test.xls;" +
"Extended Properties=Excel 8.0;";
OleDbConnection objConn = new OleDbConnection(sConnectionString);
objConn.Open();
OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM [sheet1]", objConn);
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;
DataSet objDataset1 = new DataSet();
//將Excel中數據填充到數據集
objAdapter1.Fill(objDataset1, "XLData");
objConn.Close();
從上面可以看出,使用ADO.NET可將Excel當作普通數據庫,使用SQL語句來操作。

通過ADO.NET獲取Excel文件的各Sheet名稱,可使用元數據方式:
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:/test.xls;" +
"Extended Properties=Excel 8.0;";
OleDbConnection cn = new OleDbConnection(sConnectionString);
cn.Open();
DataTable tb = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
foreach (DataRow row in tb.Rows)
{
//遍歷彈出各Sheet的名稱
MessageBox.Show(row["TABLE_NAME"]);
}
關於使用ADO.NET創建並寫入Excel文件與普通數據庫操作極為類似,參見以下代碼:
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:/test.xls;" +
"Extended Properties=Excel 8.0;";
OleDbConnection cn = new OleDbConnection(sConnectionString);
string sqlCreate = "CREATE TABLE TestSheet ([ID] INTEGER,[Username] VarChar,[UserPwd] VarChar)";
OleDbCommand cmd = new OleDbCommand(sqlCreate, cn);
//創建Excel文件:C:/test.xls
cn.Open();
//創建TestSheet工作表
cmd.ExecuteNonQuery();
//添加數據
cmd.CommandText = "INSERT INTO TestSheet VALUES(1,'elmer','password')";
cmd.ExecuteNonQuery();
//關閉連接
cn.Close();
關於SQL語句中用到的數據類型,請查看System.Data.OleDb.OleDbType 枚舉。

至此,使用ADO.NET打開、創建、讀取、寫入、保存並退出已全部實現,總結起來,與數據庫操作基本無異,很簡單。
這種方式的好處就是通用性強,將Excel中內容看作數據表,讀取操作簡單可靠,適合內容規范的Excel表格的數據讀取。缺點是當Excel結構復雜,如含合並單元等時,無法正確讀取,甚至出現不可預知的異常。

后面再繼續講述其他幾種方式,敬請期待:

2.通過Excel對象模型的“自動化”操作


3.
通過中間數據格式間接操作


4. 使用第三方控件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM