Die Ubound-Funktion war mir bisher nicht bekannt, danke!
Also das Excel-Sheet ist als Attachment einer Form in der DB hinterlegt. Ich habe schon nach einem Identifier o.ä. gesucht über den ich auf das Dokument direkt zugreifen könnte, habe aber leider nichts derartiges gefunden. Bisher habe ich nur ein Excel Sheet vom PC geöffnet, das geht ja in etwa so:
Dim Excel As Variant
Dim xlWorkbook As Variant
Dim xlSheet As Variant
Dim xlCells As Variant
Dim xlFilename As String
Set Excel = CreateObject("Excel.Application")
Excel.Workbooks.Open xlFilename
Set xlWorkbook = Excel.ActiveWorkbook
Set xlSheet = xlWorkbook.ActiveSheet
Set xlCells = xlSheet.Cells
Nur jetzt habe ich ja kein Filepath mehr, wie komme ich denn an das Attachment dieser Form ran? Mir wäre jetzt als erstes eingefallen die Form zu öffnen, dann würde ich ja über embeddedObjects auf die Attachments zugreifen können. Da der Agent aber im Hintergrund laufen sollte, darf sich kein neues Fenster öffnen..
Also ich habe jetzt folgendes gemacht:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim Excel As Variant
Set db = session.currentDatabase()
Set doc = db.Createdocument()
doc.Form = "file.path.dialog"
Set Excel = CreateObject("Excel.Application")
Set Excel = doc.Getattachment("ExcelSheet.xls")
Excel.Visible = False
Allerdings bekomme ich beim letzten Befehl immer den Fehler mein Variant würde kein Object containen. Wahrscheinlich habe ich auch einfach falsch gedacht wie ich an das Excel Dokument ran komme?
Erstmal danke für die Antworten. Auch wenn es "sinngemäß" das gleiche war, hat mir dein Post nochmal weitergeholfen, Peter.
Also ich habe jetzt eine einfache Form mit einem RT-Item erstellt. Die Form habe ich dann geöffnet und in Notes über Import meine Excel-Datei eingefügt und das Dokument abgespeichert. Habe mir dann grad eine View gemacht, in der nur dieses Dokument zu sehen ist um die NoteID über die Properties herauszufinden. Diese ist doch die letzte Reihe unter Documents-ID (nur ohne NT), oder bin ich da falsch? Dann habe ich versucht über db.getDocumentByID auf dieses Dokument zuzugreifen. Nur jetzt weiß ich nicht genau wie ich die Datei aus dem RT-Feld in mein Variant im Agent bekomme. Hier ist was ich soweit habe und wo es hängt:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim Excel As Variant
Set db = session.currentDatabase()
Set doc = db.Createdocument()
Set Excel = CreateObject("Excel.Application")
Set doc = db.Getdocumentbyid("000036AE")
Ist das bisher soweit richtig? Jetzt hätte ich mit doc.getEmbeddedObjects weitergemacht, aber dann bekomme ich immer einen Fehler...
An dieser Stelle danke ich noch einmal rechtherzlich für die tolle Hilfe in diesem Forum! (http://bilder.hifi-forum.de/medium/517662/tkqe4fh-smiley-two-thumbs-up_175028.gif)
Verdammt. Dann werde ich mal nachfragen, bezweifel aber stark, dass Excel installiert ist.
Okay, angenommen Excel wäre vorhanden und die Bearbeitung auf der temporären Datei wäre fertig. Jetzt muss ich ja die Excel-Datei wieder in das RT-Feld bekommen. Also einfach gedacht müsste ich jetzt alles rückgängig machen. Also erst das Object setzen, dann das Object an das RTItem hängen und zum Schluss das alte RTItem durch das neue ersetzen im Dokument. Allerdings will das bei mir nicht so ganz klappen :-\
Dim rtitemNew As NotesRichTextItem
Dim objNew As NotesEmbeddedObject
Set rtitemNew = New NotesRichTextItem( doc, "Body" )
Set objNew = rtitemNew.EmbedObject _
( EMBED_ATTACHMENT, "", "c:\\temp\\text.xls")
Jetzt habe ich doch ein neues RTItem mit dem überarbeiteten Excel-Dokument als Embedded-Object oder?
Okay, nach der Bearbeitung des Dokuments habe ich folgenden Code:
doc.Removeitem("template") 'altes Feld mit RT-Item
Dim rtitemNew As NotesRichTextItem
Dim objNew As NotesEmbeddedObject
Set rtitemNew = doc.Createrichtextitem("template") 'neues Feld mit RT-Item
Set objNew = rtitemNew.EmbedObject _
( EMBED_ATTACHMENT, "", "c:\\temp\\template.xls")
Call doc.Save(true, false)
Das ganze funktioniert soweit auch. Jetzt wird, nachdem der Agent ausgeführt wurde, das RT-Item (also das Icon) nicht mehr als Excel-Icon angezeigt, sondern einfach ein graues Viereck...Öffnen kann ich es ganz normal.
Dann muss ich jetzt noch die eigentliche Form mit dem, in dem jetzt erstellten Dokument vorhandenem Excel-Sheet, verknüpfen. Also bisher hatte ich in einer Form einfach ein Excel-Sheet als Attachment. Dieses Excel-Sheet soll jetzt immer das neue Excel-Dokument als Quelle verwenden.
So, unser Vorhaben wurde genehmigt, wir können voraussichtlich nächste Woche anfangen zu testen. Ich habe jetzt ein Test-Script aufgesetzt und wollte vorher hier nochmal nachfragen, ob es da vielleicht noch Verbesserungsbedarf gibt, da das ganze wirklich wichtig ist und ich erst seit etwa 3 Wochen in LS entwickle.
Die Situation ist jetzt die, dass wir in unserem Dokument einen Doclink zum Dokument in der anderen DB haben aus dem wir Daten ziehen wollen. Also hier was ich bisher habe:
Dim ws As New NotesUIWorkspace
Dim db As New NotesDatabase("db-server", "db-filepath")
Dim docA As NotesDocument
Dim docB As NotesDocument
Dim rti As NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Dim rtlink As NotesRichTextDocLink
Set docA = ws.Currentdocument.Document
Set rti = docA.GetFirstItem("doclink")
Set rtnav = rti.CreateNavigator
If Not rtnav.FindFirstElement(RTELEM_TYPE_DOCLINK) Then
MessageBox "No doclinks in doclink item",, "No doclinks"
Exit Sub
End If
Set rtlink = rtnav.Getelement()
Set docB = db.Getdocumentbyunid(rtlink.Docunid)
If docB Is Nothing Then
MessageBox "Document not found",, "No document"
Exit Sub
End If
Call docA.Replaceitemvalue("fieldA", docB.Getitemvalue("field_A"))
Call docA.Replaceitemvalue("fieldB", (docB.Getitemvalue("field_B") + docB.Getitemvalue("field_C"))*100)
...
Vielen Dank schonmal :)