Excel Datei importieren, Daten mit Datenbank verlgeichen, doc ändern ....

  • Hi,


    habe ein "kleineres" Problem. Bin in der Einarbeitung in die Programmierung von Lotus Script. Habe nun eine Aufgabe bekommen, indem ich eine Excel Datei lesen muss. Dort steht eine Kdnr. drin. Diese Kdnr. muss mit einer Datenbank verglichen werden. Wenn er die Kdnr. findet, dann muss das Dokument entsprechend geändert werden....


    Meine Frage ist....


    - Wie kann ich in einem Schritt die Excel Datei temporär importieren und mit der Datenbank vergleichen? Die Sachen aus der Excel Datei sollen nach beenden wieder aus Lotus Notes verschwinden. Es soll hierbei nur abgeglichen werden. Wenn der Kunde in der Excel Tabelle ist und in der Lotus Notes Datenbank ist, dann soll in der Notes Datenbank ein Merkmal geändert werden.


    Welche Funktionen muss ich mir anschauen?




    Vielen Dank im Voraus.

  • ...Ich würde mir ein Excel Objekt erzeugen >Set excelAppObject = CreateObject("Excel.Application")< und dann die Daten in der Excel Tabelle mit den Daten in der Datenbank abgleichen.


    Über das Excel Objekt hast Du alle VBA Klassen von Excel zur Verfügung und kannst die Daten bequem auslesen.....

    [size=x-small]
    Computer sind da um zu rechnen!
    Nicht um Ausreden wie: "Ich kann nicht durch Null teilen!", auf den Bildschirm zu schreiben.
    [/size]

  • Das mit dem Excel Objekt erzeugen ist soweit klar und auch kein Problem. Aber wie vergleiche ich dann die beiden Sachen?


    Es sieht so aus.


    Excel-Tabelle --> Wert A


    Lotus Notes View 1 ---> Wert A - Wert B (Kdnr.)


    Lotus Notes DB --> Wert B - Wert B (Dokument ändern)


    Wert A und Wert A müßen verglichen werden und wenn die übereinstimmen also bei beiden vorhanden sind, dann muss Wert B (Kdnr.) weitergegeben werden an eine andere Datenbank. In dieser DB ist ein Dokument mit dem Wert B. Dieses muss dann verändert werden....


    Alles gar ned so einfach.... :(

  • > set doc1 = view1.GetDocumentByKey(WertA)
    > if not (doc is nothing) then
    > wertB = doc1.GetItemValue(kdnr)
    > set odb = session.getDatabase(server, Datenbank B)
    > set view2 = odb.getview(suchansicht)
    > set doc2 = view2.GetDocumentByKey(WertB)
    > if not (doc2 is Nothing) then
    > 'Wert in doc2 ändern
    > end if
    > end if

    [size=x-small]
    Computer sind da um zu rechnen!
    Nicht um Ausreden wie: "Ich kann nicht durch Null teilen!", auf den Bildschirm zu schreiben.
    [/size]

  • Hi.


    Danke für Deine Antwort und Deine Hilfe.


    Habe jetzt mal eben mein Konzept umgeworfen, sonst wird das zu kompliziert.


    Will jetzt erstmal die Excel Tabelle importieren und sie mit dem View vergleichen also den Wert A und dann den zugehörigen Wert B in die importierte Excel Tabelle wieder reinschreiben und dann die Excel Tabelle wieder abspeichern.


    Also das am Ende die Excel Tabelle um den Wert B erweitert wurde. Wie kann ich eine Excel Datei ergänzen, ohne Sie komplett neu zu schreiben?

  • ...wenn Du dir das Excel-Worksheet gegriffen hast dann kannst Du auch werte hineinschreiben. Du darfst nur nicht vergessen das ganze auch zum Schluss zu speichern.

    [size=x-small]
    Computer sind da um zu rechnen!
    Nicht um Ausreden wie: "Ich kann nicht durch Null teilen!", auf den Bildschirm zu schreiben.
    [/size]

  • Dein Programmierauftrag riecht danach, daß es später dort einen täglichen Abgleich von Daten geben soll. Auch wenn es eigentlich selbstverständlich ist, sei doch am Rande der Hinweis erlaubt:


    die OLE-Funktionen stehen dir natürlich nur auf solchen Maschinen zur Verfügung, auf denen die angesprochenen OLE-Anwendungen auch installiert sind - sprich: wenn dein LotusScript-Agent nachts auf dem Notes-Server laufen soll, dann mußt du auf dem Notes-Server auch Excel installieren.

  • Zitat


    pascal_x schrieb:
    ...wenn Du dir das Excel-Worksheet gegriffen hast dann kannst Du auch werte hineinschreiben. Du darfst nur nicht vergessen das ganze auch zum Schluss zu speichern.


    Und wie mach ich das?


    Zitat


    LN4ever schrieb:


    Dein Programmierauftrag riecht danach, daß es später dort einen täglichen Abgleich von Daten geben soll. Auch wenn es eigentlich selbstverständlich ist, sei doch am Rande der Hinweis erlaubt:


    die OLE-Funktionen stehen dir natürlich nur auf solchen Maschinen zur Verfügung, auf denen die angesprochenen OLE-Anwendungen auch installiert sind - sprich: wenn dein LotusScript-Agent nachts auf dem Notes-Server laufen soll, dann mußt du auf dem Notes-Server auch Excel installieren.


    Nein, Gott sei dank nicht. Diese Merkmalsänderungen kommen in der Größenordnung von über 15.000 Datensätzen nur sehr selten vor.

    • Offizieller Beitrag
    Zitat

    Und wie mach ich das?

    Zeichne es per Makro-Recorder auf. Danach kannst Du das Makro nach Notes kopieren und musst eventuell nur ein paar syntaktische Anpassungen machen.


    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

  • Zitat


    Diali schrieb:

    Zeichne es per Makro-Recorder auf. Danach kannst Du das Makro nach Notes kopieren und musst eventuell nur ein paar syntaktische Anpassungen machen.


    Gruß
    Dirk


    Hi.


    Idee ist ned schlecht. Aber ich wollte das gerne in Lotus Script lösen. Darüber hinaus werden die zu impotierenden Excel Dateien verschiedenen sein. Also mal mehr Datensätze mal weniger. Mal mehr Spalten mit Infos mal weniger.....

  • Aha? Und wie geht das?


    Was muss ich mir dafür angucken, durchlesen?



    Wollte das eigentlich wirklich so machen, dass man nur auf einen Knopf "Importieren" drückt, dann kann man die Excel Datei auswählen. Und nachdem man die ausgewählt hat, fängt er praktisch schon an den Wert A zu vergleichen und den Wert B in die Tabelle zu schreiben, so dass der Anwender eigentlich gar keine Fehler machen kann.



    Vielen Dank schon mal für eure Antworten.

    • Offizieller Beitrag

    mach mal Excel auf.
    - beginne mit der Makro-Aufzeichnung
    - speicher die Excel-Datei
    - beende die Makro-Aufzeichnung


    Jetzt gehst Du auf Makro bearbeiten und schon siehst Du den Quelltext.


    Den Code kopierst Du in dein Script und rufst diesen mit Deinem Excel-Object auf und behebst die Syntaxfehler


    Gruß
    Dirk

  • Ja aber wie ruf ich dann die Notes Datenbank von Excel aus auf?


    Der Wert A steht im Excel Dokument
    Der Wert A und der Wert B steht in der Lotus Notes Datenbank
    Die Werte A die im Excel Dokument sind sollen jetzt im Excel Dokument mit dem Wert B ergänzt werden,


    also muss ich die Excel Tabelle doch mit der Notes Datenbank vergleichen?


    Und das geht mit dem MakroRekorder?


    Sorry ich bin total verwirrt. Bitte nicht verzweifeln.

    • Offizieller Beitrag
    Zitat

    Ja aber wie ruf ich dann die Notes Datenbank von Excel aus auf?

    Bin jetzt etwas verwirrt. Wolltest Du es nicht mit Lotus Script lösen?


    Mal ein Beispiel, was ich meinte.
    Du wolltest die Excel-Datei speichern und hast keine Ahnung wie dies mit VB gemacht wird.


    Also zeichne ich ein Makro auf. Dabei kommt dann so etwas heraus:

    Code
    ChDir "D:\"ActiveWorkbook.SaveAs Filename:="D:\test.xls", FileFormat:=xlNormal, _Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _CreateBackup:=False


    Damit kann Lotus Notes nicht viel anfangen, also passe ich die Syntax an:

    Code
    '  ChDir "D:\" ' wird nicht benötigtActiveWorkbook.SaveAs "D:\test.xls", xlNormal, "", "", False, False


    Die Konstante xlNormal kennt Notes auch nicht. Jetzt hast Du 2 Möglichkeiten. Entweder Du bindest die Konstanten ein (findest Du in der Excel-Hilfe oder als LSS-Datei (schon für Notes angepasst) hier im Forum oder Du ersetzt die Konstante durch den passenden Wert. Diesen Wert bekommst Du schnell im VBAProject heraus. Klicke die Konst. mit der rechten Maustaste an und wähle Quickinfo. schon siehst Du das xlNormal = -4143 ist.
    Damit lautet jetzt meine Zeile:

    Code
    ActiveWorkbook.SaveAs "D:\test.xls", -4143, "", "", False, False

    Damit kann Lotus Script auch noch nicht viel anfangen. Dies muss ich jetzt noch dem Excel-Objekt übergeben. In Deinem Code müsste so etwas wie:

    Code
    Set xlApp = CreateObject("Excel.Application")


    stehen. Damit ist Dein Excel-Object xlApp und das Speichern müsste so aussehen:

    Code
    xlApp.ActiveWorkbook.SaveAs "D:\test.xls", -4143, "", "", False, False


    Gruß
    Dirk

  • Diali ...ich dachte auch, dass er von Notes auf Excel zugreifen wollte und nicht umgekehrt. Aber hab auch wieder was dazugelernt... denn das mit den Konstanten kannte ich noch nicht. :idea:

    [size=x-small]
    Computer sind da um zu rechnen!
    Nicht um Ausreden wie: "Ich kann nicht durch Null teilen!", auf den Bildschirm zu schreiben.
    [/size]

    • Offizieller Beitrag

    irgendwo im Forum hatte ich die Konstanten von
    - Access 97,
    - Excel 5 und 7,
    - Excel 97,
    - Office 97,
    - OfficeBinder 97,
    - Outlook 97,
    - PowerPoint 97,
    - VB,
    - VBA und
    - Word 97
    als *.lss-Datei angehangen.
    Konnte diese aber auf die Schnelle nicht mehr im Forum finden.
    Falls Du die nicht finden kannst, kann ich diese ja nochmal anhängen.


    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

  • Ja genau. Ich will von Notes aus auf Excel zugreifen.


    @Dirk: Danke erstmal. Soweit ist alles klar. Also die Excel Datei öffnen hab ich jetzt. :)


    Jetzt muss ich praktisch die erste Spalte aus dem Excel Dokument mit der ersten Spalte aus einem View miteinander vergleichen und sofern bei beiden ein Eintrag vorhanden ist, die Zahl von der 2. Spalte der Notes Datenbank in die vorhandene Excel Tabelle einfügen und abspeichern.


    Hört sich alles leichter an als es ist. :(