2013-07-08 21 views
8

Datei in Ich habe folgende C# Funktion in meinem Projekt, das ein vorhandenes Excel-Arbeitsmappe-Objekt öffnen sollte und zurück:kann nicht geöffnet werden 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); 
    } 
} 

Aber wenn ich es laufe mit „C: \“ und „scratch.xlsx“, wirft die Open() Aufruf die folgenden Fehler:

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. 

die Datei und den Pfad existiert: ich habe den Weg von der Fehlermeldung kopiert und in ein Befehlsfenster eingefügt und die Datei lädt in Excel. Die Datei ist nicht gesperrt: Excel kann es gut öffnen, aber mein Programm kann nicht, auch direkt nach einem Neustart. Ich versuche nicht, es zu speichern, ich versuche es zu öffnen, so dass die letzte Option irrelevant ist.

Ich bin nicht in der Lage zu verstehen, warum dieses einfache Stück Code nicht funktioniert. Irgendwelche Vorschläge würden sehr geschätzt.

[bearbeiten] Ich habe jetzt versucht, diese Datei von meinem persönlichen Netzlaufwerk (M :) und von einem USB-Stick zu öffnen. Alles vergebens.

Die Anwendung ist eigentlich ein Windows-Dienst, der unter dem lokalen Systemkonto ausgeführt wird und Berichte generiert. Es schreibt derzeit CSV-Berichte ohne Zugriffsprobleme. Ich versuche nun, eine Excel-Datei als Vorlagebericht zu öffnen und verschiedene Felder auszufüllen. Beim Öffnen der Excel-Datei schlägt es fehl. Ich denke, dass die Administrator-Account-Option, die jeder vorschlägt, ein Ablenkungsmanöver ist, da es CSV-Dateien schreiben kann, wityh kein Problem. [/ edit]

--- Alistair.

+0

Versuchen Sie, als Administrator ausgeführt werden? Hat das Benutzerkonto Leseberechtigungen für die Datei? –

+0

Sind Sie oder C# entkommen die '\'? – Kami

+4

Verbinden Sie niemals Pfade wie 'Pfad + Dateiname'; Verwenden Sie 'Path.Combine (Pfad, Dateiname)' stattdessen! – Marco

Antwort

31

fand ich die folgende Seite:

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

Wo es heißt, dass ...

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

Der Fragesteller beschreibt dann genau die Situation, in der ich mit einem Windows-Dienst bin, der eine Excel-Datei nicht öffnen kann, obwohl derselbe Code in einem Befehlszeilenprogramm keine PR hat Problem.

Die Antwort berät den folgenden Ordner zu erstellen:

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

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

ich das versucht habe und es funktionierte für ein Vergnügen! Kann jemand erklären, warum es benötigt wird und irgendwelche Nachteile?

Danke,

--- Alistair.

+0

Ja. Ich habe das gleiche Problem. Und deine Lösung funktioniert auch für mich. Aber warum? – GLP

+0

Keine Ahnung warum, ich habe keinen Grund dafür gefunden und habe es komplett vergessen. Es wird mich wahrscheinlich wieder stolpern, wenn wir bald auf neue Hardware umsteigen werden! – user41013

+0

keine Ahnung, warum das funktioniert, aber ich kann bestätigen, dass es mich gerade gerettet hat, während auf Sever 2008 & Office 2010 – GreyCloud

3

Führen Sie das Programm als Admin, das C:/kann nicht von einem Programm zugegriffen werden, wenn der Benutzer als Administrator ausgeführt wird. Sie können Ihr Programm den Benutzer auffordern, machen es durch Änderung der ApplicationManifest als Administrator ausgeführt werden muss: How do I force my .NET application to run as administrator?

+0

I Füge hinzu, dass dein Code wie erwartet funktioniert, es ist nichts falsch mit deinem Code. –

+0

Ich werde das zweite, ich sehe keine Probleme mit der Annahme, dass alle Klassen tun, was ich erwarte, dass sie tun. – Pharap

+0

Ursprünglich wurde auf C: \ Reports \ zugegriffen. Ich habe den Pfad zu C: \ geändert, um es einfacher zu machen! – user41013

2

Ich lief in das gleiche Problem und Ich habe Informationen über "Registry Hack" untersucht.

Schließlich fand ich eine andere Lösung, die keine Registrierungswerte ändert und alles funktioniert ordnungsgemäß.

Diese Lösung ist ...

· Windows 2008 Server x64

Bitte diesen Ordner machen.

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

· Windows 2008 Server x86

Bitte diesen Ordner machen.

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

... anstelle von dcomcnfg.exe.

Diese Operation nahm Büroautomatisierungsprobleme in meinem System auf.

Ein Desktop-Ordner scheint im Ordner systemprofile erforderlich zu sein, um die Datei mit Excel zu öffnen.

Es verschwindet von Windows2008, Windows2003 hatte den Ordner, und ich denke, es verursacht diesen Fehler.

Ich denke, es ist sicherer als "Registry-Hack".

Wenn Sie diese Lösung versuchen, lassen Sie mich bitte Ergebnisse wissen.

+1

Ich hatte den Ordner, aber ich musste korrekte Berechtigungen gewähren. – Mishelle

Verwandte Themen