Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Hedwig14 am 22.07.13 - 11:16:16
-
Ich greife auf eine Excel-Tabelle zu um Werte auszulesen.
In der einen Tabelle habe ich verschiedene Reiter, die ich beim Auslesen berücksichtigen muss.
Mit diesem Script greift er nur auf den aktuellen Reiter zu. Wie kann ich den Sheet fest bestimmen ?
Set xl = CreateObject( "Excel.Application")
xl.Workbooks.Open xlFilename ' Open the Excel file
Set xlWorkbook = xl.ActiveWorkbook
Set xlSheet = xlWorkbook.ActiveSheet
-
xl.Sheets ("Name des Sheets").Select
Du kommst darauf, indem Du in Excel ein Macro aufzeichnest und dann die Tabelle wechselst. Danach schaust Du Dir das generierte VBA-Script an und kannst das sinngemäß übernehmen.
-
super, Danke das habe ich hinbekommen !
Jetzt habe ich ein neues Problem.
Wenn ich die Excel -Datei im geöffneten Notes-Dokument bearbeite und speicher muss ich im Anschluss das Notes-Dokument einmal schließen damit die geänderten Werte in der Excel-Tabelle im Notes-Dokument auch richtig übernommen werden werden.
Gibt es dafür auch einen Trick ohne das Dokument schließen zu müssen ?
-
Frage zu deiner Frage.
Was heist bei dir "im geöffneten Dokument"?
Ist das Excel Sheet im Notes Document enthalten? Als Object?
Oder als Attachment und du öffnest es beim öffnen des Notes documents?
Oder hast du einen eigenen Mechanismus eingebaut?
Oder holst du "nur" Werte aus einem Excel Sheet, das ganz woanders im File System gespeichert wurde?
Dein "greife zu" lässt eigentlich darauf schließen, das du es von irgendwo anders her holst. Dazu passt aber dein "neues Problem" nicht.
Der Rest ist Glaskugel.
Schau mal in die Dokumentation des Richtext Items. Da steht so was drin "Modifications made to rich text items on the back-end document do not appear on the current document until it is closed and reopened." Das bedeutet, eigentlich, das du auch programmtechnisch einen UIDocClose und Reopen machen musst um Backend Änderungen am Richtext Feld ins Frontend zu bekommen.
Hier http://searchdomino.techtarget.com/tip/Modify-a-rich-text-field-in-the-UI-without-having-to-save-and-re-open gibt es eine Anleitung wie das auch ohne Save gehen soll, aber das Dokument muss vorher mindestens einmal gespeichert worden sein.
-
Hallo Thomas,
Vielen Dank für Deine Antwort !
In einem geöffneten Notesdokument bearbeite ich eine bestehende Exceltabelle, die ich im Anschluß speichere.
Anschließend sollen per Button im gleichen immer noch offenen Notes-Dokument einige Werte aus der Excel-Tabelle ausgelesen werden und im Notes-Dokument gespeichert werden.Das funktioniert auch. Aber ich muss nach dem Bearbeiten der Excel-Datei das Notes-Dok vorher einmal schließen.
Deinen o.a. Code habe ich mal getestet. Die geänderten Daten in der Exceltabelle werden über diesen Weg aber nicht übernommen:
Sub Click(Source As Button)
Dim s As New NotesSession
Dim ws As New NotesUIWorkspace
Dim thisdb As NotesDatabase
Dim thisdoc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim nitem As Variant
Dim olduidoc As NotesUIDocument
Dim newuidoc As NotesUIDocument
Set thisdb = s.CurrentDatabase
Set olduidoc = ws.CurrentDocument
Set thisdoc = olduidoc.Document
If thisdoc.IsNewNote Then
Set nitem = thisdoc.CreateRichTextItem( "tabelle" )
End If
Set nitem = thisdoc.GetFirstItem( "tabelle" )
If ( nitem.Type = RICHTEXT ) Then
Set rtitem = nitem
Call rtitem.Appendtext("TESTLAUF")
Call rtitem.Update
End If
thisdoc.SaveOptions = "0"
Call olduidoc.Close(True)
Set newuidoc = ws.EditDocument(True, thisdoc)
Delete olduidoc
Set thisdoc = newuidoc.Document
Call thisdoc.RemoveItem( "SaveOptions" )
End Sub
-
Somit lese ich die Werte aus der Excel-Tabelle aus:
'Excel Beschluss-Doc auslesen (Excel Tabelle)
If Not doc.HasEmbedded Then
Msgbox "Kein Beschluss-Dokument vorhanden !",, "Hinweis"
Exit Sub
End If
pfad = "u:\"
zaehler = 0
Dim rtitem As Variant
Dim object As NotesEmbeddedObject
Set rtitem = doc.GetFirstItem( "tabelle" )
If doc.HasEmbedded Then
Call doc.ComputeWithForm( False, False )
Call doc.Save( False, True )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
Redim Preserve dateinamen (Cint(zaehler))
dateinamen (Cint(zaehler)) = o.Source
zaehler = zaehler +1
Else
Msgbox "Kein Beschlussdokument vorhanden !",, db.Title
Exit Sub
End If
End Forall
End If
End If
If zaehler > 1 Then
dateinametmp = ws.Prompt ( PROMPT_OKCANCELLIST,db.Title,"Wählen Sie das aktuelle Beschlussdokument aus:", dateinamen(0), dateinamen)
dateiname = "IGK_Tmp5_" & dateinametmp
Else
dateinametmp = dateinamen(0)
dateiname = "IGK_Tmp5_" & dateinamen(0)
End If
If dateiname = "" Then
Exit Sub
Else
Forall o In rtitem.EmbeddedObjects
If o.Type = EMBED_ATTACHMENT Then
If o.Name = Cstr(dateinametmp) Then
Call o.ExtractFile(Cstr(pfad & dateiname))
Print (Cstr(pfad & dateiname))
End If
End If
End Forall
Dim excelreturn As Variant
excelreturn = get_excelwerte(Cstr(pfad & dateiname))
Kill pfad & dateiname
If Not excelreturn(0) = "" Then
For i = 0 To Ubound(excelreturn)
Msgbox excelreturn(i),, i+1 & ". Wert aus Excel"
' Next
-
Da fehlt am Ende noch Code.
Bis jetzt sehen wir nur, das du das Attachment abhängst und dann nachdem du die Excelwerte mit einer anderen Routine zurückgelesen hast das abgehängtee File killst.
Die spannenden Sachen wie, wo gibst du die gefundenen Werte ans entsprechende Item zurück und speicherst du das Document auch irgendwann, erwähnst du nicht.
-
ich hatte im Reopen ein Save vergessen....
Nun läuft es erstmal gut !
Vielen Dank !