2010-01-19 110 views
2

比方說,我想在Excel文件中找到單元格的值。在VBA中,我這樣做:我需要做些什麼來設置Visual Studio才能操作Excel文件?

Dim varValue As Variant 
Dim wb As Workbook 
Dim ws As Worksheet 
Set wb = ThisWorkbook 
Set ws = wb.Worksheets("Sheet1") 
varValue = ws.Range("A1").Value 

如何建立一個Visual Studio項目,所以我可以訪問並在C#中,而不是在VBA修改Excel文件?

我需要添加哪些參考?

是否該文件必須以與它的工作打開?

回答

3

我寫我自己的,相當簡單的類從通過C#的Excel電子表格中提取數據。您需要包括:

using Microsoft.Office.Interop; 

然後,你可以做這樣的事情開始:

Excel.Application excel; 
Excel.Workbook workbook; 
Excel.Worksheet worksheet; 
Excel.Sheets sheets; 
Excel.Range range; 

excel = new Microsoft.Office.Interop.Excel.Application(); 
workbook = excel.Workbooks.Open(workbookName, 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); 
sheets = workbook.Worksheets; 
... 
+1

您還可以從COM選項卡中引用Microsoft Excel對象庫。 – 2010-01-19 22:07:39

3

您可以使用Excel自動化或第三方庫。

使用Excel自動化,您應該安裝Office PIA的,並添加一個引用Microsoft.Office.Interop.Excel.dll。然後,您將編寫代碼來打開文件(使用ApplicationClass類)並對其進行處理。

這種方法將使用你在VBA中使用同一個對象模型。但是,由於C#3不支持可選參數或弱類型,因此會有些惱人。這將是更容易做到這一點在VB .NET或C#4(目前處於測試階段)


Excel的自動化是不適合在非交互的環境中運行的代碼。有許多第三方庫完全以.Net編寫,可以讀取和寫入Excel文件。另外,如果您只需要操作類似於表的數據,則可以使用OleDb對this connection string的Excel文件運行SQL語句。

您可以使用OleDbCommand s到運行SELECT * FROM [SheetName],假設表是一張桌子。您也可以從命名範圍中進行選擇。您可以通過調用oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)並查看返回的DataTable的TABLE_NAME列來獲取可用的表。

1

您必須使用Microsoft.Office.Interop.Excel。 您需要使用COM Interop。 Here's有關如何完成的詳細教程。

2

有互操作使用。

你只需要一個參考......

System.Data.OleDb 

定義一個連接字符串,你會任何其他數據源:

string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=YourPath;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"; 

,並添加一些代碼來查詢數據庫:

OleDbConnection objConnection = new OleDbConnection(); 
string strSQL = "SELECT * FROM [YourTable]"; 
objConnection = new OleDbConnection(connectionString); 
objConnection.Open(); 
OleDbCommand cmd = new OleDbCommand(strSQL, objConnection); 
DataTable dt = new DataTable(); 
OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
da.Fill(dt); 

...然後通過你的數據行枚舉。

+0

這僅在電子表格包含類似表格的結構並且對格式不感興趣時​​纔有用。看到我的答案。 – SLaks 2010-01-19 21:45:44

+0

啊 - 指出。謝謝!如果其他人滿足這些條件,我仍然會將答案留作參考。 – 2010-01-19 21:52:13

相關問題