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 ?

Était-ce utile?

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.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top