Schreiben von Daten nach Excel Datei

  • Hallo Leute,


    ich möchte mittels zeitlichem Agenten, Daten in eine bestehende Excel Datei schreiben. Es funktioniert auch ohne Probleme, wenn die Datei aber offen ist, bleibt der Agent beim Speichern der Datei hängen bzw. die Excel Sitzung.


    Kann mir jemand sagen wie ich vorm Speichern abfragen kann ob die Excel Datei jemand offen hat.


    Domino 9, Office 2010


    Hier mein Sub:


    Sub schreibdaten(Byval daten As String, reiter As Integer)

    Dim xlApp As Variant
    Dim xlsheet As Variant
    Dim zeile As Integer
    Dim spalte As Integer
    Dim werte As Variant
    Dim lesezeile As Integer
    Dim istwert As String

    zeile = 1
    spalte = 1
    lesezeile = 1

    werte = Split(daten,"@")

    'öffnen Excel
    Set xlApp = CreateObject("Excel.Application")

    Call xlapp.Workbooks.Open ("\\server\freigabe\test.xlsx" ,3)

    Set xlsheet = xlApp.Workbooks(1).Worksheets(reiter)


    xlApp.DisplayAlerts = False

    'Suchen welches ist die nächste leere Zeile
    istwert = Trim(xlsheet.cells(lesezeile,1).value)
    While istwert <> ""
    lesezeile = lesezeile + 1
    istwert = Trim(xlsheet.cells(lesezeile,1).value)
    Wend

    'setzen Zeiger auf nächste Leere Zeile
    zeile = lesezeile

    'Schreiben der Daten in die nächste leere Zeile
    Forall entry In werte
    xlsheet.cells(zeile,spalte).value = entry
    spalte = spalte + 1
    End Forall


    xlsheet.Columns("A:Z").EntireColumn.AutoFit
    xlApp.save
    xlApp.Workbooks.close
    xlApp.quit

    End Sub

    73 x Version 9.0.1 Server, 2500 x 8.5.2 - 8.5.3 Clients alles auf Win

  • Du bekommst einen Fehlermeldung wenn du versuchst etwas zu speichern was bereits geöffnet ist, diese fehler muss mann abfangen, und sinnvollerweise VOR den Export kontrollieren (weil der arbeit ja dann kein sinn macht).

    On Error ErrOLEException Goto IsOpenFile
    xlApp.save


    Wobei ErrOLEException ist der Declarationen als wert 213 bei mir drin steht für einen ähnlichen fall, welche es genau ist kannst du z.B. mittels Err und Errl erfahren.
    Allgemein fängt mann in Lotusscript IMMER alle fehler ab z.B. wie folgt.


    On Error goto ShowError


    ......... guts of the function goes here


    exit Function
    ShowError:
    FunctionName$ = Lsi_Info( 2 ) '*** Note that not all indexes to Lsi_Info give strings.
    Print "BindAppDBs: Err = " & Cstr( Err) & ", on " & Errl & " - Error = " & Error & " in Module " & FunctionName$
    Resume Next


    Lsi_Info is a built-in function in LotusScript that has some goodies:
    Lsi_info(1) ' Current line number (in the LS source)
    Lsi_info(2) ' The current function or sub
    Lsi_Info(3) ' The current module
    Lsi_Info(6) ' The version of LotusScript running
    Lsi_Info(9) ' Current language (en for english)
    Lsi_Info(12) ' The name of the function that called this one, "the caller"
    Lsi_info(50) ' LotusScript Memory Allocated
    Lsi_info(51) ' LotusScript Memory Allocated from OS
    Lsi_info(52) ' LotusScript Blocks Used

    • Offizieller Beitrag

    der Fehler ist ein OLE-Automationsfehler, der eine Interaktion im OLE-Objekt (xlApp) erfordert.
    Prüfe vor dem Bearbeiten der Datei ob diese geöffnet ist.

    Code
    Call xlapp.Workbooks.Open ("\\server\freigabe\test.xlsx" ,3)
     If Not xlApp.ActiveWorkbook.ReadOnly = True Then
       Call xlapp.Workbooks.Open ("\\server\freigabe\test.xlsx" ,3)
       Set xlsheet = xlApp.Workbooks(1).Worksheets(reiter)
        ...
       xlsheet.Columns("A:Z").EntireColumn.AutoFit
       xlApp.save
       xlApp.Workbooks.close
       xlApp.quit
        End If


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Hallo Ronka,


    Danke erstmal für deine Antwort.
    Ich möchte ja den Fehler abfangen. Wenn ich aber On Error ErrOLEException Resume Next im Script eingebe, kommt der Fehler, dass die Variable ERROLEEXCEPTION nicht declared ist. Was muss ich da vorher noch setzten?


    LG

    73 x Version 9.0.1 Server, 2500 x 8.5.2 - 8.5.3 Clients alles auf Win

    • Offizieller Beitrag

    entweder die lserr.lss einbinden oder ErrOLEException = 213 setzen.


    Gruß
    Dirk

  • Habe mir eine kleine Funcion erstellt vorm Daten Schreiben.
    Das Problem ist, ich laufe beim Speichern auf keinen Fehler wenn die Datei offen ist.


    Function pruefen_isopen() As Boolean
    pruefen_isopen = False

    On Error 213 Goto fehler

    Dim xlApp As Variant

    Set xlApp = CreateObject("Excel.Application")

    xlApp.DisplayAlerts = False
    Call xlapp.Workbooks.Open (pfad ,3)

    xlApp.save
    xlApp.Workbooks.close
    xlApp.quit

    Exit Function
    fehler:
    Print "Fehler " & Now
    xlApp.Workbooks.close
    xlApp.quit
    pruefen_isopen = True

    End Function

    73 x Version 9.0.1 Server, 2500 x 8.5.2 - 8.5.3 Clients alles auf Win

  • dann finde zuerst raus WELCHE Fehler es ist, 213 ist einen spezifischen fehler in meinen Umfeld gewesen, es kann durchaus einen anderen OLE fehler sein. Deshalb mein allgemeine fehler routine oben.

  • ich habe jetzt die lss geladen. Ich bekomme aber keinen Fehler. Ich glaube, dass im Hintergrund eine Abfrage kommt mit einem alternativ Dateinamen. Deshab bleibt auch die Excel Sitzung offen.

    73 x Version 9.0.1 Server, 2500 x 8.5.2 - 8.5.3 Clients alles auf Win

    • Offizieller Beitrag

    ... und wenn du gleich nach dem Öffnen der Datei überprüfst ob diese schreibgeschützt geöffnet wurde? (siehe hier)


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Hallo Dirk,


    Sorry, dass ich deinen Code nicht richtig gelesen habe. Das ist die Lösung. Wenn die Datei im ReadOnly Mode geöffnet wurde, dann speichere ich nicht und kann andere Aktionen auslösen.


    Danke an alle für ihre Hilfe. Schönes Wochenende.


    bye

    73 x Version 9.0.1 Server, 2500 x 8.5.2 - 8.5.3 Clients alles auf Win