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) {;}