2

我需要从 Excel 工作表中读取一些客户数据。*.xls我发现通过这种方式读取 as 数据非常快速和容易:

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)的长度审批流程,我更喜欢使用这个流程,因为它不需要第三方库。如果可能的话,我宁愿限制对这种方法的回答。

谢谢。

4

1 回答 1

3

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

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

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

于 2013-01-14T17:45:11.220 回答