2013-07-08 30 views
8

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.

+0

Prova ad eseguire come amministratore? L'account utente ha le autorizzazioni di lettura sul file? –

+0

Sei o C# che sfugge al '\'? – Kami

+4

Non unire mai percorsi come 'percorso + nomefile'; usa 'Path.Combine (path, filename)' invece !! – Marco

risposta

31

ho trovato la seguente pagina:

http://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows-server-2008-x64

Dove dice che ...

it’s not supported to automate office products UI less. It seems that Windows Server 2008 and Excel 2007 enforce the given statement.

L'interrogante quindi descrive esattamente la situazione in cui mi trovo con un servizio di Windows che non può aprire un file di Excel, sebbene lo stesso codice in un programma della riga di comando non abbia pr oblema.

La risposta indica di creare la seguente cartella:

Windows 2008 Server x64: C:\Windows\SysWOW64\config\systemprofile\Desktop

Windows 2008 Server x86: C:\Windows\System32\config\systemprofile\Desktop

Ho provato questo e ha funzionato a meraviglia! Qualcuno può spiegare perché è necessario e gli eventuali aspetti negativi?

Grazie,

--- Alistair.

+0

Sì. Ho lo stesso problema. E la tua soluzione funziona anche per me. Ma perché? – GLP

+0

Non ho idea del perché, non ho trovato alcuna ragione per questo e l'ho completamente dimenticato. Probabilmente mi ricoverà di nuovo quando migreremo presto al nuovo hardware! – user41013

+0

non ho idea del perché funzioni, ma posso confermare che mi ha appena salvato mentre ero su Sever 2008 e office 2010 – GreyCloud

3

Eseguire il programma come amministratore, C:/non è possibile accedere a un programma a meno che l'utente non sia in esecuzione come amministratore. È possibile rendere il vostro programma richiede all'utente che deve essere eseguito come amministratore alterando l'ApplicationManifest: How do I force my .NET application to run as administrator?

+0

I Inoltre, aggiungo che il codice funziona come previsto, non c'è niente di sbagliato nel codice. –

+0

In secondo luogo, non vedo alcun problema, supponendo che tutte le classi facciano quello che mi aspetto che facciano. – Pharap

+0

Inizialmente stava accedendo a C: \ Reports \. Ho cambiato il percorso in C: \ per renderlo più semplice! – user41013

2

Ero in esecuzione lo stesso problema e Ho studiato informazioni su "hack del Registro di sistema".

Dopo tutto, ho trovato un'altra soluzione che non modifica i valori di registro e tutto funziona correttamente.

Questa soluzione è ...

· Windows 2008 Server x64

Fate questa cartella.

C:\Windows\SysWOW64\config\systemprofile\Desktop 

· Windows 2008 Server x86

Si prega di fare questa cartella.

C:\Windows\System32\config\systemprofile\Desktop 

... anziché dcomcnfg.exe.

Questa operazione ha eliminato i problemi di automazione dell'ufficio nel mio sistema.

Una cartella Desktop sembra essere necessaria nella cartella del profilo di sistema per aprire il file in Excel.

sparisce da Windows2008, Windows2003 aveva la cartella, e penso che causi questo errore.

Penso che sia più sicuro di "registro mod".

Se si prova questa soluzione, per favore fatemi sapere i risultati.

+1

Avevo la cartella, ma dovevo concedere le autorizzazioni corrette su di essa. – Mishelle

Problemi correlati