Bonjour, j'essaie d'importer un document Excel dans DataGridView dans C #. Jusqu'à maintenant, il fonctionnait mais il y a une colonne avec des données. Je dois "sortinger".
Si c'était simple, je ferais "WHERE test> 0" dans la requête OleDbDataAdapter.
Mais … Le nom de la colonne change avec chaque document et je dois l'utiliser souvent. Jusqu'à présent, j'ai compris:
private void button1_Click(object sender, EventArgs e) { Ssortingng 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; }
Dans le choix, j'ai besoin de mettre une ligne witch indiquant que les 3 premières lettres de la colonne sont les mêmes, mais le nombre qui suit n'est pas. Comme:
QTA 12345, QTA 13213, QTA 92818.
Quelque chose comme:
OleDbDataAdapter da = new OleDbDataAdapter ("SELECT * FROM [Test$] WHERE [testColumn] > 0", strConn);
Mais ensuite avec les mêmes 3 premières lettres et les derniers numbers qui sont randoms.
Quelqu'un peut-il m'aider s'il vous plaît?
J'ai essayé un code et ça marche bien pour moi. Essaye:
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 ssortingng[] { null, null, "Tabelle1$", null }); List<ssortingng> columns = new List<ssortingng>(); foreach (DataRow dr in dtColumns.Rows) columns.Add(dr[3].ToSsortingng()); ssortingng colName = columns.Find(item => item.Subssortingng(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();
Faites attention à changer la string de connection à vos besoins.
Vous pouvez couper le code en utilisant LINQ:
ssortingng colName = (from DataRow dr in dtColumns.Rows where dr[3].ToSsortingng().Subssortingng(0, 3) == "QTA" select dr[3].ToSsortingng()).ElementAt(0);