将xls读取为数据库时,确定Excel文件的第一个工作表名称

我需要从Excel工作表中读取一些客户端数据。 我发现读取*.xls作为数据非常快速和容易,如下所示:

 string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\MyExcelFile.xls;Extended Properties=\"Excel 8.0;HDR=YES\""; using (var conn = new System.Data.OleDb.OleDbConnection(connString)) { conn.Open(); System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("Select * From [SheetName$]", conn); OleDbDataReader reader = cmd.ExecuteReader(); int firstNameOrdinal = reader.GetOrdinal("First Name"); int lastNameOrdinal = reader.GetOrdinal("Last Name"); while (reader.Read()) { Console.WriteLine("First Name: {0}, Last Name: {1}", reader.GetString(firstNameOrdinal), reader.GetString(lastNameOrdinal)); } } 

问题出现在第四行: SELECT * FROM [SheetName$] 。 在此示例中,您需要将"SheetName"replace为您正在尝试阅读的工作表的名称。 大多数时候,客户端都是这样命名的,一切都很好。

但有时他们不这样做,这意味着我们需要一些手动工作来解决这个问题。 总是只有一张纸(在这种情况下),所以我宁愿告诉代码“使用第一张纸,不pipe它是什么名字”。

我还没有find一种方法来完成这个使用这种技术,所以我正在向社区伸出援手。 预先感谢您的任何build议。

PS – 我们必须通过外部文件(如FileHelpers)的长度批准过程,我更喜欢使用这个过程,因为它不需要第三方库。 如果可能的话,我宁愿限制这个方法的答案。

谢谢。

这里的答案可能适合您的需求:

http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/711cf5f9-75fc-4a02-9a96-08aec48dad69/

它使用.GetOleDbSchemaTable()获取工作簿中的工作表名称列表。