Excel到网格查看使用OleDbDataAdapter的问题

我正在使用Visual Studio 2010创buildWindows窗体应用程序。

我使用OleDbDataAdapter方法将数据填充到Excel文件的DataGridView中。

这是我的代码

dataGridView1.DataSource = null; dataGridView1.Update(); var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=No;IMEX=1\";", fileName); var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); var ds = new DataSet(); DataTable t = new DataTable(); adapter.Fill(t); dataGridView1.DataSource = t; 

现在的问题是,如果某些单元格合并在Excel文件输出获取位不同。 这是更好的理解的形象。 在这里输入图像说明

那我该如何解决这个问题呢?

我想如果我能确定合并单元格然后我可以解决这个问题。 但目前我还没有一个清晰的想法。

有没有更好的方式来表示在Excel视图中的Excel数据,因为它是在Excel文件中?

任何答案将是帮助。 请分享任何build议。

谢谢

勒芒

我的解决scheme

 protected void Page_Load(object sender, EventArgs e) { string path = @"C:\samples\firstexcel.xlsx"; GetExcelSheetNames(path); } private void GetExcelSheetNames(string excelFile) { OleDbConnection objConn = null; System.Data.DataTable dt = null; try { DataSet ds = new DataSet(); // Connection String. String connString = @"Data Source=" + excelFile + "; Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties=Excel 12.0;"; // Create connection. objConn = new OleDbConnection(connString); // Opens connection with the database. objConn.Open(); // Get the data table containing the schema guid, and also sheet names. dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (dt == null) { return; } String[] excelSheets = new String[dt.Rows.Count]; int i = 0; // Add the sheet name to the string array. // And respective data will be put into dataset table foreach (DataRow row in dt.Rows) { excelSheets[i] = row["TABLE_name"].ToString(); OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + excelSheets[i] + "]", objConn); OleDbDataAdapter oleda = new OleDbDataAdapter(); oleda.SelectCommand = cmd; oleda.Fill(ds, "TABLE"); i++; } // Bind the data to the GridView GridView1.DataSource = ds.Tables[0].DefaultView; GridView1.DataBind(); Session["Table"] = ds.Tables[0]; } catch (Exception ex) { Response.Write(ex.Message); } finally { // Clean up. if (objConn != null) { objConn.Close(); objConn.Dispose(); } if (dt != null) { dt.Dispose(); } } } protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { GridView1.PageIndex = e.NewPageIndex; GridView1.DataSource = ((DataTable)Session["Table"]).DefaultView; GridView1.DataBind(); } protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) {;}