Écrire dans un fichier Excel avec OLEDB
Question
Est-ce que quelqu'un sait comment écrire dans un fichier Excel (.xls) via OLEDB en C# ?Je fais ce qui suit :
OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
dbCmd.CommandTimeout = mTimeout;
results = dbCmd.ExecuteNonQuery();
Mais je reçois une OleDbException levée avec le message :
"Impossible de modifier la conception de la table 'test $'.C'est dans une base de données en lecture seule. "
Ma connexion semble correcte et je peux bien sélectionner les données, mais je n'arrive pas à insérer des données dans le fichier Excel. Quelqu'un sait-il comment obtenir un accès en lecture/écriture au fichier Excel via OLEDB ?
La solution
Vous devez ajouter ReadOnly=False;
à votre chaîne de connexion
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fifa_ng_db.xls;Mode=ReadWrite;ReadOnly=false;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";
Autres conseils
Je cherchais aussi et répondais mais la solution de Zorantula n'a pas fonctionné pour moi.J'ai trouvé la solution sur http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.html
J'ai supprimé le ReadOnly=false
paramètre et le IMEX=1
propriété étendue.
Le IMEX=1
La propriété ouvre le classeur en mode importation, donc les commandes de modification de structure (comme CREATE TABLE
ou DROP TABLE
) ne fonctionne pas.
Ma chaîne de connexion fonctionnelle est :
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=workbook.xls;Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=Yes;\";"
J'ai aussi eu le même problème.Supprimez uniquement la propriété étendue IMEX=1
.Cela va résoudre ton problème.Votre tableau sera créé dans votre fichier Excel...
Quelques questions :
- L'utilisateur qui exécute votre application (vous ?) a-t-il l'autorisation d'écrire dans le fichier ?
- Le fichier est-il en lecture seule ?
- Quelle est ta chaîne de connexion ?
Si vous utilisez ASP, vous devrez ajouter l'utilisateur IUSER_* comme dans cet exemple.
- Comment vérifier les autorisations d'écriture dans un fichier Excel pour mon application (j'utilise Excel 2007) ?
- Le fichier n'est pas en lecture seule, ni protégé (à ma connaissance).
- Ma chaîne de connexion est :
"Provider = Microsoft.Jet.oledb.4.0; Data Source = FIFA_NG_DB.XLS; MODE = readwrite; Properties étendues = " Excel 8.0; Hdr = Oui; IMEX = 1 ""
Suite à la réponse de Michael Haren.Le compte dont vous aurez besoin pour accorder les autorisations de modification sur le fichier XLS sera probablement SERVICE RÉSEAU si ce code s'exécute dans une application ASP.NET (il est spécifié dans le pool d'applications IIS).Pour savoir exactement sous quel compte votre code s'exécute, vous pouvez faire simple :
Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);
J'exécutais sous ASP.NET et j'ai rencontré les messages d'erreur "Impossible de modifier la conception..." et "Impossible de localiser ISAM...".
J'ai découvert que je devais :
un) Utilisez la chaîne de connexion suivante :
Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Extended Properties='Excel 8.0;HDR=Yes;';Data Source=" + {path to file};
Notez que moi aussi j'ai eu des problèmes avec IMEX=1
et avec le ReadOnly=false
attributs dans la chaîne de connexion.
b) Accordez à TOUT LE MONDE les autorisations complètes sur le dossier dans lequel le fichier a été écrit.Normalement, ASP.NET s'exécute sous le compte NETWORK SERVICE, et celui-ci disposait déjà d'autorisations.Cependant, le code OleDb n’est pas géré et doit donc s’exécuter dans un autre contexte de sécurité.(Je suis actuellement trop paresseux pour savoir quel compte, j'ai donc utilisé TOUT LE MONDE.)