2010-01-19 104 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

相关问题