Ho la seguente C# funzione nel mio progetto, che dovrebbe aprire e restituire un oggetto cartella di lavoro di Excel esistente:Impossibile aprire il file in Excel C#
Application _excelApp;
// ...
private Workbook OpenXL(string path, string filename)
{
try
{
if (_excelApp == null)
{
_excelApp = new Application();
}
Workbook workBook = _excelApp.Workbooks.Open(path + filename, // Name
0, // Do not update links
true); // Open read-only
return workBook;
}
catch (Exception e)
{
_excelApp = null;
throw new ArgumentException("Error opening " + path + filename, e);
}
}
Ma quando l'eseguo con "C: \" e "scratch.xlsx", la chiamata Open() genera il seguente errore:
Microsoft Excel cannot access the file 'C:\scratch.xlsx'. There are several possible reasons:
• The file name or path does not exist.
• The file is being used by another program.
• The workbook you are trying to save has the same name as a currently open workbook.
il file e il percorso esiste: ho copiato il percorso dal messaggio di errore e incollato in una finestra di comando e il file carica in Excel. Il file non è bloccato: Excel può aprirlo bene ma il mio programma non può, anche subito dopo il riavvio. Non sto provando a salvarlo, sto provando ad aprirlo in modo che l'ultima opzione sia irrilevante.
Non riesco a capire perché questo semplice pezzo di codice non funziona. Qualsiasi suggerimento sarebbe molto apprezzato.
[modifica] Ho tentato di aprire il file dall'unità di rete personale (M :) e da una chiavetta USB. Tutto inutilmente.
L'applicazione è in realtà un servizio di Windows, in esecuzione con l'account di sistema locale e la generazione di report. Attualmente scrive report CSV senza alcun problema di accesso. Ora sto provando a farlo aprire un file excel come report di un modello e riempire vari campi. È quando si apre il file Excel che fallisce. Sto pensando che l'opzione dell'account amministratore che tutti suggeriscono sia una falsa pista perché può scrivere file CSV senza alcun problema. [/ edit]
--- Alistair.
Prova ad eseguire come amministratore? L'account utente ha le autorizzazioni di lettura sul file? –
Sei o C# che sfugge al '\'? – Kami
Non unire mai percorsi come 'percorso + nomefile'; usa 'Path.Combine (path, filename)' invece !! – Marco