Salut à tous,
Alors voila, je suis en train de développer une petite application de rien du tout pour parcourir des fichiers excels et agréger un certain nombre d’information dans différente datatable.
Pour cela, j’utilise le code suivant :
[code] public DataTable GetfichierFeuilleFichierExcel(string strCheminFichier, string strNomFeuilleExcel)
{
// Chaine de connexion
string strCnx = « Provider=Microsoft.Jet.OLEDB.4.0;Data Source= » + strCheminFichier + « ;Extended Properties= » + (char)34 + « Excel 8.0;HDR=Yes; » + (char)34 + « ; »;
System.Data.DataTable dtRetour = null;
System.Data.OleDb.OleDbConnection oCnx = new System.Data.OleDb.OleDbConnection(strCnx);
System.Data.OleDb.OleDbCommand objCmdSelect = null;
System.Data.OleDb.OleDbDataAdapter objAdapter = null;
System.Data.DataSet oDs = new DataSet();
rt_output.Text += Environment.NewLine + « DEBUG - GetfichierFeuilleFichierExcel - IN - [ » + strCheminFichier + « ] – [ » + strNomFeuilleExcel + « ] » + Environment.NewLine;
// vérification globale des données entrantes
if (strCheminFichier != string.Empty && strNomFeuilleExcel != string.Empty)
{
if (System.IO.File.Exists(strCheminFichier))
{
try
{
// ouvertur de la connexion
oCnx.Open();
// création de la commande
objCmdSelect = new System.Data.OleDb.OleDbCommand(« SELECT * FROM [ » + strNomFeuilleExcel + « $] », oCnx);
objAdapter = new System.Data.OleDb.OleDbDataAdapter();
// on informe de l’instruction SELECT
objAdapter.SelectCommand = objCmdSelect;
// on execute la requete en spécifiant le protocole et on remplit le DataSet
objAdapter.Fill(oDs, « XLData »);
// Vérification du dataset
if (oDs != null && oDs.Tables != null && oDs.Tables.Count > 0)
{
rt_output.Text += « DEBUG - GetfichierFeuilleFichierExcel - Ouverture reussi - dtretour != null » + Environment.NewLine;
dtRetour = oDs.Tables[0];
}
else
{
rt_output.Text += « DEBUG - GetfichierFeuilleFichierExcel - Ouverture KO - dtretour == null » + Environment.NewLine;
dtRetour = null;
}
// Libération
oCnx.Close();
objCmdSelect.Dispose();
objAdapter.Dispose();
}
catch (Exception e)
{
rt_output.Text += "DEBUG EXCEPTION : "+Environment.NewLine+e.ToString()+ Environment.NewLine;
}
}
else
rt_output.Text += "DEBUG - GetfichierFeuilleFichierExcel - Ouverture KO - fichier existe pas" + Environment.NewLine;
}
else
rt_output.Text += "DEBUG - GetfichierFeuilleFichierExcel - string en entrée vide" + Environment.NewLine;
return dtRetour;
}[/code]
C’est du code que j’ai récupérer sur le net, et je maitrise pas du tout les connexions OLE. C’est surement la qu’est le probleme d’ailleurs (si vous avez de la doc la dessus).
Mais tout marche tres bien sur mon PC. La procedure me retourne bien les données du fichier excel que je souhaite ouvrir, et j’ai développer mon appli sur cette base.
La elle est fini, je la montre a un pote qui la trouve bien pratique et me la demande.
Je la publie donc sous Visual C# express (je maitrise pas non plus cette partie d’ailleurs, si vous avez des docs la dessus …), lui envoie le setup, il l’installe et … impossible d’ouvrir les fichiers excel.
Je rajoute donc les trace en debug ci dessous pour voir ce qui se passe, et ca plante avec l’erreur suivante à l’ouverture des fichiers xls :
Creation de la liste de PAN -- Fichier source : D:\2 - Activité\1 - Reporting\PAN_List.xls
. on traite la feuille SFR_Projects
DEBUT - GetfichierFeuilleFichierExcel - IN - [D:\2 - Activité\1 - Reporting\PAN_List.xls] -- [ SFR_Projects]
EXCEPTION :
System.Data.OleDb.OleDbException: Pilote ISAM introuvable.
à System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
à System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
à System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
à System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
à System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
à System.Data.OleDb.OleDbConnection.Open()
à AbbaccusFollowUp.ExcelReader.GetfichierFeuilleFichierExcel(String strCheminFichier, String strNomFeuilleExcel)
-- KO
0 PAN traités au total
C’est quoi cet histoire de pilote ISAM ?
Je sais que mon code d’ouverture est pas top, vu que la version de excel est hardcodé, mais je sais pas trop quoi mettre a la place. De plus, il a la meme version d’excel que moi.
Et surtout, comment faire ca proprement pour que l’ouverture de fichier excel marche a tout les coups ?
Je suis egalement preneur d’autre methode de lecture de fichier excel si vous en connaissez des meilleurs