如何在Excel中读取每个单元格的数据列标题和数据使用c#

我有一个类似于以下的Excel表格:

excel截图

我想读取数据列标题:所有,col1,col2,col3,col4,col5

并获取所有单元格数据,例如行= 2和列2 = 0中的单元格

我目前写这个代码:

OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT top 5 * FROM " + excelSheets[j], connString); DataTable fooData = new DataTable(); dbAdapter.Fill(fooData); foreach (DataRow row in fooData.Rows) { Response.Write(row[0].ToString()); //Response.Write(row[1].ToString()); } 

但它只返回一个数据表,只有1列,只是1..5行文本。

我怎么能做到这一点?

请说出答案,而不使用Linq to Excel Provider和Open Xml。

编辑1:

 string file_name = "C:\\Book1.xlsx"; string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file_name + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\""; objConn = new OleDbConnection(connString); objConn.Open(); dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (dt == null) { Response.Write("Not Exist"); } String[] excelSheets = new String[dt.Rows.Count]; int i = 0; foreach (DataRow row in dt.Rows) { excelSheets[i] = row["TABLE_NAME"].ToString(); i++; } // Loop through all of the sheets if you want too... for (int j = 0; j < excelSheets.Length; j++) { OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT top 100 * FROM " + excelSheets[j], connString); DataTable fooData = new DataTable(); dbAdapter.Fill(fooData); foreach (DataRow row in fooData.Rows) { Response.Write(row[0].ToString()); } } 

例如,通过fooData.Columns[0].ColumnName获取第一列的列名称 – 请参阅http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.columnname.aspx

编辑:

SELECT更改为SELECT * FROM并使用Fill (0, 5, new DataTable[] { fooData })

 "SELECT * FROM [" + excelSheets[j] + "$A1:C5]" 

试试这个。 它应该返回从A1到C5的所有单元格。

您select的驱动程序适用于Excel 2007(connectionString中的“Provider = Microsoft.ACE.OLEDB。12 .0”)。 你的Excel文件是2007年还是2010年?

对于只有逻辑的数据列标题在这里:

  string filePath = "C:\\Book1.xlsx"; string connString = string.Empty; if (path.EndsWith(".xlsx")) { //2007 Format connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", path); } else { //2003 Format connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", path); } using (OleDbConnection con = new OleDbConnection(connString)) { using (OleDbCommand cmd = new OleDbCommand()) { //Read the First Sheet cmd.Connection = con; con.Open(); DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); con.Close(); string firstSheet = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); //Read the Header Row cmd.CommandText = "SELECT top 1 * From [" + firstSheet + "]"; using (OleDbDataAdapter da = new OleDbDataAdapter(cmd)) { DataTable HeaderColumns = new DataTable(); da.SelectCommand = cmd; da.Fill(HeaderColumns); List<string> Filedata = new List<string>(); foreach (DataColumn column in HeaderColumns.Columns) { string columnName = HeaderColumns.Rows[0][column.ColumnName].ToString(); Filedata.Add(columnName); ViewBag.Data = Filedata; } } } }