Domanda

Qualcuno sa come scrivere su un file Excel (.xls) tramite OLEDB in C#?Sto facendo quanto segue:

   OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
   dbCmd.CommandTimeout = mTimeout;
   results = dbCmd.ExecuteNonQuery();

Ma ricevo un'eccezione OleDbException con il messaggio:

"Impossibile modificare la progettazione della tabella 'Test $'.È in un database di sola lettura. "

La mia connessione sembra a posto e posso selezionare bene i dati ma non riesco a inserire i dati nel file Excel, qualcuno sa come posso ottenere l'accesso in lettura/scrittura al file Excel tramite OLEDB?

È stato utile?

Soluzione

Devi aggiungere ReadOnly=False; alla stringa di connessione

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\";

Altri suggerimenti

Stavo anche cercando e rispondendo, ma la soluzione di Zorantula non ha funzionato per me.Ho trovato la soluzione su http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.html

Ho rimosso il ReadOnly=false parametro e il IMEX=1 proprietà estesa.

IL IMEX=1 apre la cartella di lavoro in modalità di importazione, quindi i comandi di modifica della struttura (come CREATE TABLE O DROP TABLE) non funzionano.

La mia stringa di connessione funzionante è:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=workbook.xls;Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=Yes;\";"

Anch'io ho avuto lo stesso problema.Rimuovi solo la proprietà estesa IMEX=1.Questo risolverà il tuo problema.La tua tabella verrà creata nel tuo file Excel...

Un paio di domande:

  • L'utente che esegue la tua app (tu?) ha il permesso di scrivere sul file?
  • Il file è di sola lettura?
  • Qual è la stringa di connessione?

Se utilizzi ASP, dovrai aggiungere l'utente IUSER_* come in questo esempio.

  • Come posso verificare le autorizzazioni per la scrittura su un file Excel per la mia applicazione (sto utilizzando Excel 2007)?
  • Il file non è di sola lettura o protetto (per quanto ne so).
  • La mia stringa di connessione è:

"Provider = Microsoft.jet.oledb.4.0; Data Source = Fifa_ng_db.xls; Mode = readWrite; Extended Properties = " Excel 8.0; HDR = Yes; IMEX = 1 ""

In seguito alla risposta di Michael Haren.L'account a cui dovrai concedere le autorizzazioni di modifica per il file XLS sarà probabilmente SERVIZIO DI RETE se questo codice è in esecuzione in un'applicazione ASP.NET (è specificato nel pool di applicazioni IIS).Per scoprire esattamente con quale account viene eseguito il tuo codice, puoi eseguire una semplice operazione:

Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);

Stavo utilizzando ASP.NET e ho riscontrato i messaggi di errore "Impossibile modificare la progettazione..." e "Impossibile individuare ISAM...".

Ho scoperto che dovevo:

UN) Utilizzare la seguente stringa di connessione:

Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Extended Properties='Excel 8.0;HDR=Yes;';Data Source=" + {path to file};

Nota anch'io ho avuto problemi con IMEX=1 e con il ReadOnly=false attributi nella stringa di connessione.

B) Concedere a TUTTI i permessi completi per la cartella in cui è stato scritto il file.Normalmente, ASP.NET viene eseguito con l'account SERVIZIO DI RETE e dispone già di autorizzazioni.Tuttavia, il codice OleDb non è gestito, quindi deve essere eseguito in un altro contesto di sicurezza.(Al momento sono troppo pigro per capire quale account, quindi ho usato TUTTI.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top