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