2011-09-13 52 views
1

你好,我嘗試導入一個Excel文檔到我在C#中的DataGridView。 到目前爲止,它的工作,但有一個與數據列,我需要'排序'。在C#中導入Excel槽OleDbDataAdapter隨着更改列名

如果這很簡單,我會在OleDbDataAdapter查詢中執行「WHERE test> 0」。

但是..列的名稱隨着每個文檔而改變,我需要經常使用它。到目前爲止,我得到這個:

private void button1_Click(object sender, EventArgs e) 
    { 

     String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
     "Data Source=C:\\Users\\Test\\Desktop\\Test.xls;" + 
     "Extended Properties=Excel 8.0;"; 

     DataSet ds = new DataSet(); 
     OleDbDataAdapter da = new OleDbDataAdapter 
     ("SELECT * FROM [Test$]", strConn); 

     da.Fill(ds); 
     dataGridView1.DataSource = ds.Tables[0].DefaultView; 

    } 

在選擇我需要把線巫狀態列的前3個字母是相同的,但後面的號碼都沒有。像:

QTA 12345, QTA 13213, QTA 92818.

喜歡的東西:

OleDbDataAdapter da = new OleDbDataAdapter 
     ("SELECT * FROM [Test$] WHERE [testColumn] > 0", strConn); 

但隨後以相同的前3個字母,誰是隨機的最後數字。

有人可以幫我嗎?

回答

1

我試過一些代碼,它適用於我。試試看:

OleDbConnection oleDbConnection = new OleDbConnection(
    "Provider=Microsoft.Jet.OLEDB.4.0;" + 
    "Data Source=D:\\Users\\name\\Desktop\\test.xls;" + 
    "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"); 
oleDbConnection.Open(); 

//Get columns 
DataTable dtColumns = oleDbConnection.GetSchema("Columns", new string[] { null, null, "Tabelle1$", null }); 
List<string> columns = new List<string>(); 

foreach (DataRow dr in dtColumns.Rows) 
    columns.Add(dr[3].ToString()); 

string colName = columns.Find(item => item.Substring(0,3) == "QTA"); 

DataSet ds = new DataSet(); 
OleDbDataAdapter da = new OleDbDataAdapter 
    ("SELECT * FROM [Tabelle1$] WHERE [" + colName + "] > 0", oleDbConnection); 
da.Fill(ds); 
dataGrid1.ItemsSource = ds.Tables[0].DefaultView; 
oleDbConnection.Close(); 

注意根據需要更改連接字符串。

您可以修剪的代碼,使用LINQ:

string colName = (from DataRow dr in dtColumns.Rows where dr[3].ToString().Substring(0, 3) == "QTA" select dr[3].ToString()).ElementAt(0); 
+0

非常感謝您的回答。這正是我需要繼續工作的項目。謝謝 – Drabe