使用C#与OleDbConnection获取特定工作表的Excel文件中的列名

到目前为止,我已经设法得到整个Excel文件的列名,但我想要做的是获得给定表(表)的Excel文件的列名。 我如何修改代码来实现这一点。 我一直在尝试一段时间没有积极的结果,任何帮助非常感激。

public static List<String> ReadSpecificTableColumns(string filePath, string sheetName) { var columnList = new List<string>(); try { var excelConnection = new OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + filePath + "';Extended Properties='Excel 12.0;IMEX=1'"); excelConnection.Open(); var columns = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, null); excelConnection.Close(); if (columns != null) { columnList.AddRange(from DataRow column in columns.Rows select column["Column_name"].ToString()); } } catch (Exception exception) { Console.WriteLine(exception.Message); } return columnList; } 

您的代码中没有包含工作表名称。
你可以尝试下面的代码:

 var adapter = new OleDbDataAdapter("SELECT * FROM [" +sheetName + "$]", excelConnection); var ds = new DataSet(); adapter.Fill(ds, "myTable"); DataTable data = ds.Tables["myTable"]; foreach(DataColumn dc in data.Columns){ ... } 

你可以做这样的事情:

  private void ValidateExcelColumns(string filePath) { var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=Yes;TypeGuessRows=0;ImportMixedTypes=Text\""; ; using (var conn = new OleDbConnection(connectionString)) { conn.Open(); DataTable dt = new DataTable(); var sheets = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); using (var cmd = conn.CreateCommand()) { cmd.CommandText = "SELECT TOP 1 * FROM [" + sheets.Rows[0]["TABLE_NAME"].ToString() + "] "; var adapter = new OleDbDataAdapter(cmd); adapter.Fill(dt); } foreach(DataColumn column in dt.Columns) { //Do something with your columns } } }