Domino 9 und frühere Versionen > ND8: Entwicklung
Problem beim Auslesen einer Tabelle aus einem RichTextFeld
(1/1)
Matthias78:
Hallo,
ich habe folgendes Problem.
Ich habe ein Dokument mit einem RichText Feld. Dieses Feld enthält eine NotesTabelle.
Ich muss nun die einzelnen Zellen dieser Tabelle (im QueryOpen) auslesen und in Arrays umspeichern, damit die Infos weiterverarbeitet werden können.
Grundsätzlich funktioniert das auch, jedoch gibt es in der letzten Tabellenspalte einen mehrzeiligen Text. Und hier liegt mein Problem ich bekomme leider immer nur die erste Zeile aus dieser Zelle.
Gibt es hier eine Möglichkeit den gesamten Text aus dieser Zelle auszulesen ?
Danke schon mal im voraus.
Gruß
Matthias
----------
Dim doc As NotesDocument
Dim rtitem_bodyhitlist As NotesRichTextItem
Dim rtnav_table As NotesRichTextNavigator
Dim rttable As NotesRichTextTable
Dim rtrange As NotesRichTextRange
Dim rows As Integer
Dim columns As Integer
Dim Inhalt As String
Dim array_subject() As String
Dim array_from() As String
Dim array_sendto() As String
Dim array_posteddate() As String
Dim array_abstract() As String
Set doc = source.Document
'Wenn Feld bodyhitlist vorhanden und Anzahl Treffer > 0
If doc.HasItem("bodyHitlist") And doc.numHits(0) > 0 Then
Set rtitem_bodyhitlist = doc.GetFirstItem("bodyHitlist")
Set rtnav_table = rtitem_bodyhitlist.CreateNavigator()
'Tabelle suchen
If rtnav_table.FindFirstElement(RTELEM_TYPE_TABLE) Then
Set rttable = rtnav_table.GetElement
rows=rttable.RowCount
columns=rttable.ColumnCount
If rows > 1 Then
'Array initialisieren
Redim array_subject(rows - 2) As String
Redim array_from(rows - 2) As String
Redim array_sendto(rows - 2) As String
Redim array_posteddate(rows - 2) As String
Redim array_abstract(rows - 2) As String
'Daten werden ab der 2. Zeile und ab der 3. Spalte ausgelsen
If rtnav_table.FindFirstElement(RTELEM_TYPE_TABLECELL) Then
For r=1 To rows
For c=1 To columns
If c> 2 And r > 1 Then
Set rtrange = rtitem_bodyhitlist.CreateRange
Call rtrange.SetBegin(rtnav_table)
Call rtrange.SetEnd(rtnav_table)
Inhalt = rtrange.TextParagraph()
Select Case c
Case 3:
array_subject(r-2) = Inhalt
Case 4:
array_from(r-2) = Inhalt
Case 5:
array_sendto(r-2) = Inhalt
Case 6:
array_posteddate(r-2) = Inhalt
Case 7:
array_abstract(r-2) = Inhalt
End Select
End If
Call rtnav_table.FindNextElement(RTELEM_TYPE_TABLECELL, 1)
Next
Next
End If
End If
End If
Ralf_M_Petter:
Ein kurzer Blick in die Designer Hilfe hätte dir verraten wie es geht;-)
Hier das Beispiel aus der Designer Hilfe
--- Code: ---Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim rtnavBody As NotesRichTextNavigator
Dim rtnavTable As NotesRichTextNavigator
Dim rtnavCell As NotesRichTextNavigator
Dim rtrangeTable As NotesRichTextRange
Dim rtrangeCell As NotesRichTextRange
Dim rtrangePara As NotesRichTextRange
Dim counter As Integer
Dim msg As String
Dim rtnavFlag As Boolean
Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
Set body = doc.GetFirstItem("Body")
REM Get first table in Body item
REM Set range and navigator for it
Set rtnavBody = body.CreateNavigator
If Not rtnavBody.FindFirstElement(RTELEM_TYPE_TABLE) Then
Messagebox "Body item does not contain a table,",, _
"Error"
Exit Sub
End If
Set rtrangeTable = body.CreateRange
Call rtrangeTable.SetBegin(rtnavBody)
Call rtrangeTable.SetEnd(rtnavBody)
Set rtnavTable = rtrangeTable.Navigator
REM Get each cell in table
REM Set range and navigator for it
Set rtrangeCell = body.CreateRange
Set rtrangePara = body.CreateRange
Call rtnavTable.FindFirstElement(RTELEM_TYPE_TABLECELL)
Do
Call rtrangeCell.SetBegin(rtnavTable)
Call rtrangeCell.SetEnd(rtnavTable)
Set rtnavCell = rtrangeCell.Navigator
msg = ""
counter = counter + 1
REM Get each paragraph in cell
REM Set range and its paragraph text
rtnavFlag = rtnavCell.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH)
If rtnavFlag Then
Do
Call rtrangePara.SetBegin(rtnavCell)
Call rtrangePara.SetEnd(rtnavCell)
msg = msg & rtrangePara.TextParagraph & Chr(13)
Loop While rtnavCell.FindNextElement(RTELEM_TYPE_TEXTPARAGRAPH)
Else
msg = "<No text paragraph in cell>"
End If
Messagebox msg,, "Cell " & counter
Loop While rtnavTable.FindNextElement(RTELEM_TYPE_TABLECELL)
End Sub
--- Ende Code ---
Du musst also innerhalb der Zelle nocheinmal mit einem Navigator die einzelnen Textparagraphen auslesen und dann sollte es funktionieren.
Grüße
Ralf
Matthias78:
Hallo,
erstmal Danke für die Antwort.
Bin leider erst heute dazu gekommen die Antwort zu lesen.
Ich habe zwar auch in der Designerhilfe gesucht. (Ohne die wäre ich wahrscheinlich nicht mal bis zu diesem Punkt gekommen ;) )
Jedoch habe ich mich, da ich bisher Navigatoren und Ranges noch nie benutzt habe, ordentlich verheddert.
Ich werde mir das Ganze bei nächster Gelegenheit nochmal genauer ansehen.
Dann hoffentlich mit etwas mehr Erfolg :)
Gruß
Matthias
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln