我需要做些什么来设置Visual Studio来操作Excel文件?

比方说,我想要在Excel文件中find单元格的值。 在VBA中,我会这样做:

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文件?

我可能需要添加什么参考?

该文件需要打开才能使用它?

我写了自己的,相当简单的类,通过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; ... 

您可以使用Excel自动化或第三方库。

要使用Excel自动化,您应该安装Office PIA并添加对Microsoft.Office.Interop.Excel.dll的引用。 然后,您将编写代码来打开文件(使用ApplicationClass类)并对其进行处理。

这种方法将使用您在VBA中使用的相同的对象模型。 但是,由于C#3不支持可选参数或弱打字,所以会有些恼人。 在VB .Net或C#4(目前处于testing阶段)


Excel自动化不适用于在非交互式上下文中运行的代码。 有许多第三方库可以读取和写入Excel文件。

另外,如果您只需要操作类似于表的数据,则可以使用OleDb使用此连接string针对Excel文件运行SQL语句。

您可以使用OleDbCommand运行SELECT * FROM [SheetName] ,假设该表是一个表。 您也可以从命名范围中进行select。 您可以通过调用oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)并查看返回的DataTable的TABLE_NAME列来获取可用的表。

不必使用互操作。

你只需要一个参考…

 System.Data.OleDb 

像任何其他数据源一样定义一个连接string:

 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); 

然后列举你的数据行。

你必须使用Microsoft.Office.Interop.Excel。 你需要使用COM Interop。 这里有一个关于如何完成的详细教程。