我需要从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)进行长度审批,我更喜欢使用此过程,因为它不需要第三方库。如果可能的话,我宁愿限制这种方法的答案。
感谢。
答案 0 :(得分:3)
这里的答案可能符合您的需求:
它使用.GetOleDbSchemaTable()
获取工作簿中的工作表名称列表。