用不同的工作表名称读取多个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
做些什么。