2011-10-05 147 views
1

在C#中,如何从Excel文件的工作表中获取列名?从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(); 
+0

[从c#中的excel文件中读取列名称]的可能的重复(http://stackoverflow.com/questions/3855101/read-column-names-from-excel-file-in-c) – codingbadger

回答

4

请问您连接字符串包含HDR = YES

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

一旦你填入你的数据表或数据集,你可以把平常方法:

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位环境中工作。

+0

这可行。谢谢! –