ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
1600
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Avatar von Don Philippo
    Don Philippo ist offline Mitglied Bronze
    Registriert seit
    Nov 2005
    Beiträge
    43
    Hallo .NET-ler,

    brauch mal wieder ein bißchen Hilfe. Hab das Forum bzgl. meines Problems schon durchforstet, aber irgendwie nicht fündig geworden.
    Wäre Euch sehr dankbar, wenn ihr mir konkret zu meinem Problem helfen könntet! Danke!

    Folgendes:
    Ich möchte ein Excel-Dokument öffnen (ohne, daß jedoch Excel geöffnet wird --> Funktioniert auch soweit!) und editieren. Jedoch nur, wenn die Datei von keinem anderen benutzt wird.


    Hier noch ein bißchen Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
                [COLOR="blue"]try[/COLOR]
                {
                    Excel.[COLOR="Teal"]Application[/COLOR] exlApp = [COLOR="Blue"]new[/COLOR] Excel.[COLOR="teal"]Application[/COLOR]();
                    Excel.[COLOR="teal"]Workbook[/COLOR] wb = exlApp.Workbooks.Open(strPath, 0, [COLOR="blue"]false[/COLOR], 5, [COLOR="DarkRed"]""[/COLOR], [COLOR="darkred"]""[/COLOR], [COLOR="blue"]true[/COLOR], [COLOR="teal"]Type[/COLOR].Missing, [COLOR="darkred"]"\t"[/COLOR], [COLOR="blue"]true[/COLOR], [COLOR="blue"]false[/COLOR], 0, [COLOR="blue"]true[/COLOR], [COLOR="blue"]true[/COLOR], [COLOR="blue"]false[/COLOR]);
                    Excel.[COLOR="teal"]Worksheet[/COLOR] wc = [COLOR="Blue"]new [/COLOR]Microsoft.Office.Interop.Excel.[COLOR="teal"]Worksheet[/COLOR]();
     
                    [COLOR="blue"]object [/COLOR]objRange = [COLOR="blue"]null[/COLOR];
                    [COLOR="blue"]object [/COLOR]objOpt = [COLOR="Teal"]Missing[/COLOR].Value;
     
                    workSheetNo = wb.Worksheets.Count;
     
                    [COLOR="DarkGreen"]//Hier arbeite ich mit dem Excel-Dokument ...[/COLOR]
     
                    [COLOR="teal"]Marshal[/COLOR].ReleaseComObject(wc);
                    [COLOR="Blue"]if [/COLOR](bContinue)
                        wb.Save(); [COLOR="darkgreen"]//Problem No. 2[/COLOR]
                    wb.Close([COLOR="blue"]false[/COLOR], [COLOR="teal"]Type[/COLOR].Missing, [COLOR="teal"]Type[/COLOR].Missing);
                    [COLOR="teal"]Marshal[/COLOR].ReleaseComObject(wb);
                    exlApp.Quit();
                    [COLOR="teal"]Marshal[/COLOR].ReleaseComObject(exlApp);
                    bContinue = [COLOR="Blue"]false[/COLOR];
                }
                [COLOR="blue"]catch [/COLOR]([COLOR="Teal"]COMException [/COLOR]e)
                {
                    ...
                }

    Schön wäre es, wenn man statt der MessageBox "Möchten sie die Datei schreibgeschützt öffnen?" unterbinden könnte und stattdessen ne eigene MessageBox mit der Nachricht "Zugriff verweigert! Datei in Gebrauch!" bekommt.

    Bin ich da mit der COMException-Variante auf dem richtigen Weg?! Auf jeden Fall hab ich im Moment keine elegante Lösung parat.

    Erbitte um Hilfe?
     

  2. #2
    romin ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Beiträge
    42
    hallo,
    darf Excel nicht geöffnet werden, oder reicht es wenn es nur nicht sichtbar ist?
    Dann könntest du nämlich mit
    Code :
    1
    
    exlApp.Visible=False
    Das Sichtbarkeitsproblem lösen. Alternativ kannst du auch eine Verbindung zu dem Excelsheet aufbauen und diesen mit einem Recordset bearbeiten. Dann bräuchtest du kein Excel

    zu deinem anderen Problem kann ich dir wenig sagen, hast du schonmal nachgesehen, ob man überprüfen kann welche Programme gerade laufen? Sobald Excel läuft kannst du ja den Zugriff im Programm unterbinden . Eine Excelfunktion sowie das EXCLUSIV ÖFFNEN von Access habe ich noch nicht gesehen

    Gruß romin
     

  3. #3
    Avatar von Don Philippo
    Don Philippo ist offline Mitglied Bronze
    Registriert seit
    Nov 2005
    Beiträge
    43
    Hi Romin,

    vielen Dank für die Antwort.
    Das mit der Excel-Applikation ist kein Problem. Das funktioniert.

    Komm nur nicht drauf, wie ich abfragen kann, ob die Datei schon von einem anderen User benutzt wird.

    Verbal sollte es so aussehen:
    Siehe Anhang

    Danke
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Excel-Datei nur öffnen, wenn nicht durch anderen Benutzer in Bearbeitung-c_sharp_fileaccess_flow.gif  
     

  4. #4
    romin ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Beiträge
    42
    geht es darum das eine Datei im Netzwerk hinterlegt ist? oder ist die datei nur von deinem eigenen PC aus zu öffnen?
     

  5. #5
    Avatar von Don Philippo
    Don Philippo ist offline Mitglied Bronze
    Registriert seit
    Nov 2005
    Beiträge
    43
    Ja genau, die Datei ist im Netzwerk hinterlegt.
    Ein kleines "wichtiges" Detail, das ich vergessen hatte .. Sorry!

    Dürfte eigentlich bestimmt nicht so schwer sein, den Status abzufragen und zu entscheiden, ob man zugreift oder nicht. Find aber nix ... oder bzw. weiß nicht mehr nach was ich suchen soll ...
     

  6. #6
    romin ist offline Mitglied Bronze
    Registriert seit
    Jul 2007
    Beiträge
    42
    Hi,
    habe ich mir auch schon so ein bisschen gedacht. Sonst bräuchte man ja nicht unbedingt abfragen ob die Datei aufgerufen ist. Also mir fällt dazu nur eine GANZ stumpfe Lösung ein.
    Es geht ja wahrscheinlich darum, dass es Konflikte gibt wenn die Datei gerade geändert wurde/wird. Du könntst also einen Blattschutz auf die Exceldateien legen. Und bei dem Start von deinem Programm fragt er ab, ob das Dokument geschützt ist oder nicht. Da der Benutzer jedes mal den Blattschutz aufheben muss, wenn er das Dokument ändern will, hättest du so eine Überprüfung inklusive Blattschutz . Problem ist natürlich das der Blattschutz aktiv sein muss wenn das Dokument geschlossen wird! Das kann man zwar mit einem VBA Makro machen, dafür muss dieses aber vorher aktiviert sein. Wenn du den Benutzer dazu zwingen willst Makros zu aktivieren kannst du den Blattschutz mit einem langen Passwort versehen welches nur das Makro bzw dein Programm aufheben kann

    Ich hoffe ich habe dich nicht erschlagen aber das war die einzige kreative Idee die mir in den Sinn gekommen ist

    Gruß romin
     

  7. #7
    Avatar von Don Philippo
    Don Philippo ist offline Mitglied Bronze
    Registriert seit
    Nov 2005
    Beiträge
    43
    Hm, ich probier's mal aus.
    Aber da wär dann immer noch das Problem, wenn ich schreiben will. Dann frägt er auch jedes mal nach dem Makro, oder?
    Es uß doch irgendwas einfaches geben, wo man den Status eines Windows-Dokumentes abfragen kann und demnach entscheidet, welche Aktion man ausführt ... :-P ?! Für sowas ist doch das "mächtige" C# eigentlich entwickelt worden ... ?!
    Naja, kommt Zeit kommt Rat!

    Danke nochmal für den Tipp!
     

  8. #8
    Avatar von Norbert Eder
    Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.106
    Das Application-Objekt hat eine Eigenschaft DisplayAlerts. Damit kannst du gleich mal die Meldungen für den User abschalten. Das ist das eine.

    Wenn ein anderer User ein Workbook geöffnet hat, dann kannst du es ja ohnehin nur im schreibgeschützen Modus öffnen. Das heißt, du könntest beim geöffneten Workbook die Eigenschaft ReadOnly abfragen. Wenn true, dann hat es ein anderer User geöffnet, andernfalls solltest du deine Änderungen durchführen können.

    Hoffe das hilft mal vorerst weiter.
     

  9. #9
    Avatar von Don Philippo
    Don Philippo ist offline Mitglied Bronze
    Registriert seit
    Nov 2005
    Beiträge
    43
    Hi Nobert,

    jepp hat geklappt! Wunderbar! Mein Fehler war noch zusätzlich, dass ich an der falschen Stelle (nach dem .Release-Befehl für das Excel-File) einen Breakpunkt gesetzt hatte um zu prüfen, ob der Schreibschutz während des Zugriffs über das Programm besteht.
    Tja, aber da wurde das File schon wieder frei gegeben, da der Release-Befehl ja schon abgearbeitet wurde!
    So kann man ja keine Message bekommen, die auf den Schreibschutz hinweist.
    Das mit den Display-Alerts ist auch ein guter Tipp!

    Vielen Dank!

    Gruß,
    Philipp
     

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 13.10.10, 12:10
  2. Serversicherheit durch Sandbox / anderen Benutzer unter WinXP
    Von ZodiacXP im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 20.12.09, 22:37
  3. Excel-Datei lässt sich nicht öffnen
    Von Hattrix im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 02.08.08, 18:49
  4. Antworten: 3
    Letzter Beitrag: 15.03.05, 21:17
  5. Antworten: 3
    Letzter Beitrag: 16.10.02, 12:11