Scrittura in file Excel con OLEDB
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?
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.)