Création fichier Excel avec Oledb [Résolu]

quentin22breizh 35 Messages postés mercredi 30 juillet 2014Date d'inscription 27 avril 2017 Dernière intervention - 19 mai 2016 à 21:04 - Dernière réponse : quentin22breizh 35 Messages postés mercredi 30 juillet 2014Date d'inscription 27 avril 2017 Dernière intervention
- 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
Afficher la suite 
35Messages postés mercredi 30 juillet 2014Date d'inscription 27 avril 2017 Dernière intervention

11 réponses

Répondre au sujet
Whismeril 10516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 19 mai 2016 à 21:22
0
Utile
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

Commenter la réponse de Whismeril
quentin22breizh 35 Messages postés mercredi 30 juillet 2014Date d'inscription 27 avril 2017 Dernière intervention - Modifié par quentin22breizh le 19/05/2016 à 21:33
0
Utile
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();
Commenter la réponse de quentin22breizh
Whismeril 10516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 19 mai 2016 à 22:50
0
Utile
4
IL existe le fichier?
quentin22breizh 35 Messages postés mercredi 30 juillet 2014Date d'inscription 27 avril 2017 Dernière intervention - 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.....
Whismeril 10516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 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.
quentin22breizh 35 Messages postés mercredi 30 juillet 2014Date d'inscription 27 avril 2017 Dernière intervention > Whismeril 10516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 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....
Whismeril 10516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention > quentin22breizh 35 Messages postés mercredi 30 juillet 2014Date d'inscription 27 avril 2017 Dernière intervention - 20 mai 2016 à 06:33
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
Commenter la réponse de Whismeril
vb95 1385 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - Modifié par vb95 le 20/05/2016 à 01:18
0
Utile
1
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. 
Whismeril 10516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 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.
Commenter la réponse de vb95
quentin22breizh 35 Messages postés mercredi 30 juillet 2014Date d'inscription 27 avril 2017 Dernière intervention - 20 mai 2016 à 10:03
0
Utile
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();
Commenter la réponse de quentin22breizh
quentin22breizh 35 Messages postés mercredi 30 juillet 2014Date d'inscription 27 avril 2017 Dernière intervention - Modifié par quentin22breizh le 23/05/2016 à 10:35
0
Utile
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
Commenter la réponse de quentin22breizh

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.