Remplir combobox et erreur system.data.datarowview [Résolu]

Signaler
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011
-
soupiste
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011
-
salut !

J'ai aujourd'hui un problème, le même qui me semble récurrent sur le forum, mais dont je ne trouve pas la solution:
En effet, je remplis mon combobox d'une liste de feuilles contenues dans un fichier excel par le code suivant:

if (openFDialog.ShowDialog() == DialogResult.OK)
{
LabelFile.Text = openFDialog.FileName;
System.Data.OleDb.OleDbConnection ExcelConnection = null;
System.Data.DataTable ExcelTables = new System.Data.DataTable("TABLE");

try
{
ExcelConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openFDialog.FileName + ";Extended Properties=" + (char)34 + "Excel 8.0;HDR=Yes;" + (char)34 + ";");
ExcelConnection.Open();
ExcelTables = ExcelConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

ComboBoxEx.DataSource = ExcelTables;
ComboBoxEx.DisplayMember = "TABLE";
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
// ExcelConnection.Close();
}

Le seul résultat que je constate, c'est que mon combobox se rempli de SYSTEM.DATA.DATAROWVIEW
J'ai beau bidouillé pour voir quel était le problème, mais rien à faire, et je traine encore !

De l'aide s'il vous plait !

je développe en C#

6 réponses

Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011

Grand merci à toi MasterSleepy !

Ce cas marche parfaitement! J'avais auparavant envisagé cette manière de faire, mais je m'étais bloqué à mon foreach qui ne reconnaissait pas mon
" Excel.Worksheet " J'ignorais que appeler using Excel ou using Microsoft.Office.Interop.Excel était différent ! et à propos, j'ai dû modifier ton code pour que ça marche :

Code qui marche :

if (openFDialog.ShowDialog() == DialogResult.OK)
{
LabelFile.Text = openFDialog.FileName;
myApp = new Microsoft.Office.Interop.Excel.Application();
myWkb = myApp.Workbooks.Open(openFDialog.FileName, false, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, false, 1, 0);
allWorkSheet.Clear();

foreach (Excel.Worksheet myWks in myWkb.Worksheets)
{
allWorkSheet.Add(myWks.Name.ToString());
}
ComboBoxEx.DataSource = allWorkSheet;
ComboBoxEx.Refresh();

myWkb.Close(false, System.Type.Missing, System.Type.Missing);
myApp.Quit();

}

J'ai seulement appelé : using Microsoft.Office.Interop.Excel et non using Excel = Microsoft.Office.Interop.Excel

Et donc merci de m'avoir donné le chemin ! Ce code saura certainement servir à bon nombre de personnes !

Salutation !!!!!!!!!!!!!!!!!!!!!!! javascript:void(0);
Messages postés
6
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
6 octobre 2009

Salut,

Essaye de remplacer
ComboBoxEx.DisplayMember = "TABLE";
par
ComboBoxEx.DisplayMember = "TABLE_NAME";

Chez moi cela fonctionne mais il ajoute un "$" à la fin du nom.

++
MasterSleepy.
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011

Mais, dans ce cas, "TABLE_NAME" serait vu en tant que quoi ?

Toutefois, j'ai bien essayé, et ça marche !
Mais comme tu l'as toi même dis, il y a des expression du type ' et $ à la fin du nom de la feuille.

De même, dans mon application, le nom de feuille sélectionnée dans le combobox doit être renvoyé et sera prise en compte dans une methode qui ouvre le ladite feuille du fichier excel.

Mais, je reçois comme erreur :

[u]L'exception NULLReferenceException n'a pas été gérée par le code utiliseur

La référence d'objet n'est pas définie à une instance d'objet/u

Voici comment j'appelle la valeur sélectionnée dans le combobox:

[b] SheetSelector selectFeuil = new SheetSelector();
string Nomdefeuille = selectFeuil.ComboBoxEx.SelectedItem.ToString();/b



Pouvez vous m'orienter ?
Messages postés
79
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
22 juin 2011

Ah! vraiment les gars! ce serait bon de finir avec ce problème qui ne m'a que trop fatigué
Messages postés
6
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
6 octobre 2009

Pourquoi ne pas instancier un object Excel et parcourir toutes les worksheets.
J'ai faire un test et voilà

private void button2_Click(object sender, EventArgs e)
{
Excel.Application myApp;
Excel.Workbook myWkb;

if (openFDialog.ShowDialog() == DialogResult.OK)
{
LabelFile.Text = openFDialog.FileName;
myApp = new Excel.Application();
myWkb = myApp.Workbooks.Open(openFDialog.FileName, false, false, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
allWorkSheet.Clear();
foreach (Excel.Worksheet myWks in myWkb.Worksheets)
{
allWorkSheet.Add(myWks.Name.ToString());
}
ComboBoxEx.DataSource = allWorkSheet;
ComboBoxEx.Refresh();

myWkb.Close(false, System.Type.Missing, System.Type.Missing);
myApp.Quit();
}
}

Il faut avoir définir
BindingList<String> allWorkSheet;
en entête de class et
allWorkSheet = new BindingList<string>();
dans le constructeur.

++
MasterSleepy.
Messages postés
6
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
6 octobre 2009

J'oubliais il faut un référence a Microsoft.Office.Interop.Excel
et
using Excel = Microsoft.Office.Interop.Excel;

++