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

时间:2013-01-14 04:50:26

标签: excel oledb

我需要从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));
    }
}

问题出现在第4行:SELECT * FROM [SheetName$]。在此示例中,您需要将"SheetName"替换为您尝试阅读的工作表的名称。大多数情况下,客户端将此命名为相同,一切都很好。

但有时他们没有,这意味着我们需要一些手动工作来修复它。总是只有一张纸(在这种情况下无论如何),所以我宁愿告诉代码“使用第一张纸,无论它命名为什么”。

我无法使用这种技术找到实现这一目标的方法,所以我正在接触社区。提前感谢任何建议。

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

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