用不同的工作表名称读取多个Excel工作表

我想知道我怎么可以读取多个Excel工作表与不同的工作表名称在C#和使用OEDB。

我有这种现有的方式来阅读多张(但固定的工作表名称):

DataSet ds = new DataSet(); var excelConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0", path); OleDbConnection connection = new OleDbConnection(); connection.ConnectionString = excelConnectionString; var i = 1; while (i <= 4) { string query = "SELECT * FROM [Sheet" + i + "$]"; ds.Clear(); OleDbDataAdapter data = new OleDbDataAdapter(query, connection); data.Fill(ds); // other stuff i = i + 1; } 

这个工作。 但是我现在处于不同的情况,其中工作表名称不固定,例如:Sheet1是Dog,Sheet2是Cat Sheet3是Bird。

现在我关心的是如何使用我现有的代码循环这些工作表名称。

这是来自VB.net,但不知道如何转换,返回一个包含所有表名称的string列表:

 OleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"}) 

MSDN链接

一旦你有一个表名单的列表,你可以做一个简单的For Each循环迭代。

编辑:

这应该在C#中工作

添加function

 static DataTable GetSchemaTable(string connectionString) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); DataTable schemaTable = connection.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); return schemaTable; } } 

您的代码将更改为:

 DataSet ds = new DataSet(); var excelConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0", path); OleDbConnection connection = new OleDbConnection(); connection.ConnectionString = excelConnectionString; DataTable sheets = GetSchemaTable(excelConnectionString); foreach (dataRow r in sheets.rows) { string query = "SELECT * FROM [" + r.Item(0).ToString + "]"; ds.Clear(); OleDbDataAdapter data = new OleDbDataAdapter(query, connection); data.Fill(ds); } 

每次迭代之后都要确保使用ds做些什么。