从Excel工作表中获取列名称

在C#中,如何从Excel文件中的工作表中获取列名?

这是我的代码到目前为止:

ConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", "@"C:\file.xlsx"); objConn.Open(); OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM ["xlWorksheet"$]", objConn); OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); objAdapter1.SelectCommand = objCmdSelect; DataSet objDataset1 = new DataSet(); objAdapter1.Fill(objDataset1); objConn.Close(); 

你连接的string是否包含HDR = YES

 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES"; 

一旦你填充你的DataTable或DataSet,你可以按照通常的方式处理:

 dt.Columns[0].ColumnName 

要么:

 // For each DataTable, print the ColumnName. foreach(DataTable table in dataSet.Tables) { foreach(DataColumn column in table.Columns) { Console.WriteLine(column.ColumnName); } } 

另外这看起来没有语法正确:

 OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM ["xlWorksheet"$]", objConn); 

应该是这样的:

 OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + xlWorksheet + "$]", objConn); 

最后,如果您有时间 – 调查EPPlus(开放源代码)读取/写入Excel – http://epplus.codeplex.com,因为它可以在32位和64位环境中使用。