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