将Excel导入到DataGridView中

我正在做一个程序,两个数据库合并在一起….我可以导入一个Excel电子表格到这个代码的DataGridView:

string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.xls;Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"""; DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb"); DbDataAdapter adapter = factory.CreateDataAdapter(); DbCommand selectCommand = factory.CreateCommand(); selectCommand.CommandText = "SELECT * FROM [All Carpets to Excel$]"; DbConnection connection = factory.CreateConnection(); connection.ConnectionString = connectionString; selectCommand.Connection = connection; adapter.SelectCommand = selectCommand; data = new DataSet(); adapter.Fill(data); dataGridView1.DataSource = data.Tables[0].DefaultView; 

我遇到的问题是,我试图find一种方法来将源文件更改为由对话框返回的path。 我有一个包含文件path的string文件。 我如何将这个到连接string?

或者也许有一个更好的方法来做到这一点?

谢谢!

卢克

使用OleDbConnectionStringBuilder类来修改您的连接string。

 string fileName = "your path to the excel.xls"; // From the dialog box. OleDbConnectionStringBuilder connStringBuilder = new OleDbConnectionStringBuilder(); connStringBuilder.DataSource = fileName; // Set path to excel file connStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0"; connStringBuilder.Add("Extended Properties", "Excel 8.0;HDR=YES;IMEX1"); ... // Get the connection string from the builder. connection.ConnectionString = connStringBuilder.ConnectionString; 

您只需要Microsoft.Office.Interop.Excel并将其与数据表和数据集结合使用。

  Excel.Workbook ExWorkbook; Excel.Worksheet ExWorksheet; Excel.Range ExRange; Excel.Application ExObj = new Excel.Application(); DataTable dt = new DataTable("dataTable"); DataSet dsSource = new DataSet("dataSet"); dt.Reset(); openFileDialog1.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm"; DialogResult result = openFileDialog1.ShowDialog(); if (result == DialogResult.OK) // Test result. { ExWorkbook = ExObj.Workbooks.Open(openFileDialog1.FileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); ExWorksheet = (Excel.Worksheet)ExWorkbook.Sheets.get_Item(1); ExRange = ExWorksheet.UsedRange; for (int Cnum = 1; Cnum <= ExRange.Columns.Count; Cnum++) { dt.Columns.Add(new DataColumn((ExRange.Cells[1, Cnum] as Excel.Range).Value2.ToString())); } dt.AcceptChanges(); string[] columnNames = new String[dt.Columns.Count]; for (int i = 0; i < dt.Columns.Count; i++) { columnNames[0] = dt.Columns[i].ColumnName; } for (int Rnum = 2; Rnum <= ExRange.Rows.Count; Rnum++) { DataRow dr = dt.NewRow(); for (int Cnum = 1; Cnum <= ExRange.Columns.Count; Cnum++) { if ((ExRange.Cells[Rnum, Cnum] as Excel.Range).Value2 != null) { dr[Cnum - 1] = (ExRange.Cells[Rnum, Cnum] as Excel.Range).Value2.ToString(); } } dt.Rows.Add(dr); dt.AcceptChanges(); } ExWorkbook.Close(true, Missing.Value, Missing.Value); ExObj.Quit(); dataGridView1.DataSource = dt;