2012-07-05 109 views
1

我正在做,其中的兩個數據庫合併到一起的程序....我可以導入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; 

我遇到的問題是我試圖找到一種方法將源文件更改爲由對話框返回的路徑。我有一個包含文件路徑的字符串文件。我如何將它併入連接字符串?

或者也許有更好的方法來做到這一點?

謝謝!

盧克

+1

只需更換數據源= C:\ TEST.XLS」與對話框中的值 – 2012-07-05 17:26:41

+0

@TimLentine該文件位於距對話框值可視改變,我需要這種改變發生 – 2012-07-05 17:41:10

+0

用「連接字符串」中的對話框路徑將路徑更改爲字符串名稱會引發錯誤 – 2012-07-05 17:48:59

回答

2

使用OleDbConnectionStringBuilder類來修改你的連接字符串。

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; 
+0

完美!謝謝你!工作起來就像一個魅力一樣。 – 2012-07-05 18:13:00

0

您只需要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;