Création fichier Excel avec Oledb

Résolu
quentin22breizh Messages postés 34 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 27 avril 2017 - 19 mai 2016 à 21:04
quentin22breizh Messages postés 34 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 27 avril 2017 - 23 mai 2016 à 10:35
Bonjour à tous,

Je me permets de venir vers vous pour une question en C#. Je cherche à créer un fichier type Excel et mon code plante en me disant ceci:

Une exception non gérée du type 'System.Data.OleDb.OleDbException' s'est produite dans System.Data.dll

Informations supplémentaires : « C:\Temp\PLCTags.xlsx » n’est pas un chemin d’accès valide. Assurez-vous que le nom du chemin d’accès est correct et qu’une connexion est établie avec le serveur sur lequel réside le fichier.

Voici le code utilisé:
//Création fichier de sortie

OleDbConnection olecon = new OleDbConnection();
OleDbCommand olecmd = new OleDbCommand();
string FilePath = "C:\\Temp\\";
string FileName = "PLCTags.xlsx";
string connstring = ("Provider=Microsoft.ACE.OLEDB.12.0;" + ("Data Source=" + (FilePath + (FileName + (";" + "Extended Properties=\"Excel 12.0 Xml;HDR=YES;\"")))));
olecon.ConnectionString = connstring;
olecon.Open();
olecmd.Connection = olecon;
string FEUILLE = "PLC Tags";
olecmd.CommandText = ("CREATE TABLE" + (FEUILLE + " (Name VARCHAR, Path VARCHAR, Data Type VARCHAR, Logical Address VARCHAR, Comment VARCHAR, Hmi Visible VARCHAR, Hmi Accessible VARCHAR)"));
olecmd.ExecuteNonQuery();
// ~~> Adding Data
// ~~> Close the connection
olecon.Close();



Si quelqu'un voit l'origine de mon problème, je l'en remercie d'avance
A voir également:

6 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
19 mai 2016 à 21:22
Bonsoir

je ne sais pas si c'est l'origine, mais
           string FilePath = "C:\\Temp\\";
            string FileName = "PLCTags.xlsx";


je ne voie pas l'intérêt
           string FilePath = "C:\\Temp\\PLCTags.xlsx"";


Voire même
           string FilePath = @"C:\Temp\PLCTags.xlsx"";

Me paraissent plus sûrs et simples

0
quentin22breizh Messages postés 34 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 27 avril 2017
Modifié par quentin22breizh le 19/05/2016 à 21:33
Salut Whismeril,

Merci de ta réponse. Je viens de tester ta proposition mais ça ne change rien malheureusement.

Le souci vient vraiment de la connexion car il me plante à ce niveau. Après il faudra que j'affine la fonction de création du fichier

Voici le nouveau code:


leDbConnection olecon = new OleDbConnection();
OleDbCommand olecmd = new OleDbCommand();
string FilePath = @"C:\Temp\PLCTags.xlsx";
string connstring = ("Provider =Microsoft.ACE.OLEDB.12.0;" + ("Data Source=" + (FilePath +";" + "Extended Properties=\"Excel 12.0 Xml;HDR=YES;\"")));
olecon.ConnectionString = connstring;
olecon.Open();
olecmd.Connection = olecon;
string FEUILLE = "PLC Tags";
olecmd.CommandText = ("CREATE TABLE" + (FEUILLE + " (Name VARCHAR, Path VARCHAR, Data Type VARCHAR, Logical Address VARCHAR, Comment VARCHAR, Hmi Visible VARCHAR, Hmi Accessible VARCHAR)"));
olecmd.ExecuteNonQuery();
// ~~> Adding Data
// ~~> Close the connection
olecon.Close();
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
19 mai 2016 à 22:50
IL existe le fichier?
0
quentin22breizh Messages postés 34 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 27 avril 2017
19 mai 2016 à 23:01
Non, justement je cherche à le créer. J'ai trouver un code en vb.net que j'ai converti et ça ne fonctionne pas. Il doit manquer quelque chose mais quoi.....
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
19 mai 2016 à 23:04
Les bases de données c'est pas mon fort, mais il me semble que pour s'y connecter ça doit exister.
0
quentin22breizh Messages postés 34 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 27 avril 2017 > Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024
19 mai 2016 à 23:20
Ce que je ne comprends pas c'est qu'en vb ça fonctionne (Création du fichier même s'il n'existe pas) mais en c#, il n'en veut pas....
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656 > quentin22breizh Messages postés 34 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 27 avril 2017
Modifié par Whismeril le 20/05/2016 à 06:46
VB.Net laisse quelques largesses au développeur que ne tolère pas C#.

Pour vérifier ma théorie, crée un fichier avec Excel avec une ligne d'entête et une de données et tente de t'y connecter.
Si ça marche, enlève la ligne de donnée, puis la ligne d'entête.

Si ça ne marche pas c'est que le problème vient d'ailleurs.


Edit: après quelques recherches sur le net, je ne trouve aucun exemple de création avec oledb, alors que connexion, lecture écriture.

Dans une question précédente, tu as dit que ton besoin est de ne pas utiliser l'API, as tu essayer les quelques librairies existantes sur le net?
Voir cette discussion
http://codes-sources.commentcamarche.net/forum/affich-10059825-chargement-datagridview-dans-un-fichier-excel#1
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 20/05/2016 à 01:18
Bonsoir
string FilePath = "C:\\Temp\\";

Pourquoi mettre des double slash ? C'est un chemin sur ton disque dur et de simples slash suffisent à mon avis

Je suis arrivé un peu trop tard désolé
dans le nouveau code le rôle du @ devant le nom complet du fichier c'est quoi ?
J'ai compris : c'est pour doubler les \ dans le nom de fichier
Alors je sèche

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
20 mai 2016 à 06:30
Bonjour,
en C# le \ dans les string est un caractère spécial, en fait depuis le C c'est comme ça.
Il sert à changer le sens du caractère qui suit, on dit que c'est l'échappement.
Par exemple "\t", c'est une tabulation.
Donc pour obtenir le caractère '\' il faut l'échapper: "\\", mais selon la façon dont on construit le string, il faut parfois l'échapper doublement "\\\\”.
D'ou le @ devant, qui sert à imposer le format "Adresse" ou le '\' est un '\' et rien d'autre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
quentin22breizh Messages postés 34 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 27 avril 2017
20 mai 2016 à 10:03
Bonjour à tous,

Bon à priori, il sait "créer" le fichier car si je laisse ma connexion ouverte, il ajoute bien un fichier sur mon bureau avec le nom donné mais si je ferme ma connexion, il le supprime... Des idées?

Voici le nouveau code:

OleDbConnection MyConnection = default(OleDbConnection);
OleDbDataAdapter MyCommand = default(OleDbDataAdapter);
string FilePath = @"C:\Users\qmor\Desktop\PLCTags.xlsx";
MyConnection = new OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + FilePath + "; Extended Properties = 'Excel 12.0 XML;HDR=YES;'; ");
MyCommand = new OleDbDataAdapter("CREATE TABLE Sheet1 (F1 char(255), F2 char(255))", MyConnection);
MyConnection.Open();
//MyConnection.Close();
0
quentin22breizh Messages postés 34 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 27 avril 2017
Modifié par quentin22breizh le 23/05/2016 à 10:35
Bonjour à tous,

Suite à un gros coup de pouce de la part d'un collegue, j'ai enfin une solution qui créé mon fichier et qui le rempli. L'intérêt des forum étant de partager les données afin que d'autres puissent les utiliser, je vous joins le code:

//Création fichier de sortie

string FilePath = @"C:\Users\qmor\Desktop\PLCTags.xlsx";

using (OleDbConnection conn = new OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + FilePath + "; Extended Properties = 'Excel 12.0 XML;HDR=YES;'; "))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;

cmd.CommandText = "CREATE TABLE table1 (id INT, name VARCHAR, [date col] DATE );";
cmd.ExecuteNonQuery();

cmd.CommandText = "INSERT INTO [table1](id,name,[date col]) VALUES(1,'AAAA','2014-01-01');";
cmd.ExecuteNonQuery();

cmd.CommandText = "INSERT INTO [table1](id,name,[date col]) VALUES(2, 'BBBB','2014-01-03');";
cmd.ExecuteNonQuery();

cmd.CommandText = "INSERT INTO [table1](id,name,[date col]) VALUES(3, 'CCCC','2014-01-03');";
cmd.ExecuteNonQuery();

cmd.CommandText = "UPDATE [table1] SET name = 'DDDD' WHERE id = 3;";
cmd.ExecuteNonQuery();
}


Encore un grand merci aux personnes qui m'ont aider.

Bonne journée
0
Rejoignez-nous