L'écriture dans le fichier excel avec OLEDB
Personne ne sait comment faire pour écrire dans un fichier excel (.xls) via OLEDB en C#? Je suis en train de faire les suivants:
OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
dbCmd.CommandTimeout = mTimeout;
results = dbCmd.ExecuteNonQuery();
Mais j'obtiens une OleDbException jeté avec le message:
"Ne peut pas modifier la conception de la table
'test$'. Il est en lecture seule
la base de données."
Ma connexion semble très bien et je peux sélectionner des données bien, mais je n'arrive pas à insérer des données dans le fichier excel, personne ne sait comment je reçois des accès en lecture/écriture dans le fichier excel via OLEDB?
Le classeur déjà une feuille nommée test$?
OriginalL'auteur Danielb | 2008-09-12
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter
ReadOnly=False;
à votre chaîne de connexionMerci pour cette réponse & commentaire. Résolu mon problème !!!
Tout ce qui est essentiel, c'est
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Docs\Test.xls;Mode=ReadWrite;Extended Properties=""Excel 8.0;HDR=Yes""
MaxScanRows et IMEX dépendent de paramètres de registre dans une certaine mesure et ne sont souvent pas nécessaire.OriginalL'auteur Zorantula
J'étais également à la recherche et à la réponse, mais Zorantula la solution 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 enlevé le
ReadOnly=false
paramètre et laIMEX=1
étendue de la propriété.La
IMEX=1
propriété s'ouvre le classeur dans le mode d'importation, de sorte que la structure de modification des commandes (CREATE TABLE
ouDROP TABLE
) ne fonctionnent pas.Mon travail de la chaîne de connexion est:
OriginalL'auteur
J'ai également eu le même problème. Ne retirez l'étendue de la propriété
IMEX=1
. Qui permettra de résoudre votre problème. Votre table sera créé dans votre fichier Excel...OriginalL'auteur Erwin Aarnoudse
Quelques questions:
Si vous êtes en utilisant de l'ASP, vous aurez besoin d'ajouter IUSER_* l'utilisateur comme dans cet exemple.
OriginalL'auteur Michael Haren
Vous devriez essayer IMEX=0 à la place
OriginalL'auteur Danielb
Plus à Michael Haren réponse. Le compte que vous aurez besoin d'accorder Modifier les autorisations pour le fichier XLS sera probablement RÉSEAU de SERVICE si ce code est en cours d'exécution dans un ASP.NET application (c'est spécifié dans le Pool d'Applications IIS). Pour savoir exactement ce que compte votre code s'exécute, vous pouvez faire un simple:
OriginalL'auteur Duncan Smart
J'ai été en cours d'exécution en vertu de l'ASP.NET rencontré à la fois "Ne peut pas modifier le design..." et "Ne peut pas localiser ISAM..." messages d'erreur.
J'ai trouvé que j'avais besoin de:
un) Utiliser 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};
Remarque moi aussi j'avais des problèmes avec
IMEX=1
et avec leReadOnly=false
attributs dans la chaîne de connexion.b) Accorder à tout le monde toutes les autorisations sur le dossier dans lequel le fichier a été écrit. Normalement, ASP.NET s'exécute sous le compte SERVICE RÉSEAU, et qui avaient déjà des autorisations. Cependant, le OleDb code non managé, de sorte qu'il doit exécuter dans un autre contexte de sécurité. (Actuellement, je suis trop paresseux pour comprendre ce qui compte, donc j'ai simplement utilisé à tout le monde.)
OriginalL'auteur