Bonjour,
Je cherche à récupérer un tableau contenu dans un document Lotus notes.
Lorsque ce tableau fait une taille supérieur à 205 cellules environ.., mon script ne parvient pas à tout récupérer...
Pour info, Lotus génère automatiquement de nouveaux champs "Body" lorsque la taille du premier devient trop importante...Je pense que mon souci se situe ici !
Voici ce que contient mon document :
Code : Tout sélectionner
NB champs Body : 2
TYPE : 1 (RICHTEXT)
;Dans ce champ BOdy :
NB $RTELEM_TYPE_TABLE: 1 ( 1 seul tableau)
NB $RTELEM_TYPE_TABLECELL: 414
Nb Lignes = 69
Nb Colonnes = 6
Nb Cells = 414
Je peux récupérer l'intégralité de mon champ body en faisant un
Item.Values ou encore en utilisant les fonctions NotesRichTextItem.GetFormattedText ou NotesRichTextItem.GetUnformattedText
mais malheureusement je peux pas récupérer la mise en forme (tableau) ce qui rend mes données inexploitables !
J'ai également essayé de supprimé le premier item Body pour passé au second.. mais lotus les supprime tous !
voici une partie de mon code :
► Afficher le texte
Code : Tout sélectionner
Func RecupValCELL(ByRef $rtnavTable)
$msg = ""
$cellCounter = $cellCounter + 1
; REM $up range and navigator for cell
$rtRangeCell.SetBegin($rtnavTable)
$rtRangeCell.SetEnd($rtnavTable)
$rtnavCell = $rtRangeCell.Navigator
; REM Find paragraphs in cell
$rtnavCell.FindFirstElement($RTELEM_TYPE_TEXTPARAGRAPH)
$rtRangePara.SetBegin($rtnavCell)
$msg = $msg & $rtRangePara.TextParagraph & Chr(10)
While $rtnavCell.FindNextElement($RTELEM_TYPE_TEXTPARAGRAPH)
$rtRangePara.SetBegin($rtnavCell)
$msg = $msg & $rtRangePara.TextParagraph & Chr(10)
wend
Return $msg
EndFunc
Func LectTable(byRef $body)
$rtnav = $Body.CreateNavigator
;Nombre d'éléments dans mon Body.
$NbTables = GetCount($rtnav,$RTELEM_TYPE_TABLE)
ConsoleWrite("NB $RTELEM_TYPE_TABLE: " & $NbTables & @CRLF)
$NBCells = GetCount($rtnav,$RTELEM_TYPE_TABLECELL)
ConsoleWrite("NB $RTELEM_TYPE_TABLECELL: " & $NBCells & @CRLF)
$NBparag = GetCount($rtnav,$RTELEM_TYPE_TEXTPARAGRAPH)
ConsoleWrite("NB $RTELEM_TYPE_TEXTPARAGRAPH: " & $NBparag & @CRLF)
;$rtnav = $body.CreateNavigator
If Not $rtnav.FindFirstElement($RTELEM_TYPE_TABLE) Then
ConsoleWrite( "Body item does not contain a table" & @CRLF)
Exit
EndIf
; $up range and navigator for table
$rtRangeTable = $body.CreateRange
$rtRangeTable.SetBegin($rtnav)
$rtRangeTable.SetEnd($rtnav)
$rtnavTable = $rtRangeTable.Navigator
; Find cells in table
$rtRangeCell = $body.CreateRange
$rtRangePara = $body.CreateRange
$cellCounter = 0
$rtt=$rtnav.GetElement
$nblignes=$rtt.RowCount
$nbCol=$rtt.ColumnCount
ConsoleWrite("Nb Lignes = " & $nblignes & @CRLF)
ConsoleWrite("Nb Colonnes = " & $nbCol & @CRLF)
ConsoleWrite("Nb Cells = " & ($nblignes*$nbCol) & @CRLF)
If $Nbcells >205 Then
MsgBox(4096,"Multiples BODY Items..","Ce document contient plusieurs éléments Body" & @CRLF & "Attention à ne pas enregistrer ce document une fois cette macro lancée..")
EndIf
ReDim $Tab[$nblignes+1][$nbCol+1]
;$Tab[1][1]=$rtrange.TextParagraph
$Tab[0][0]=$nblignes
;Première cellule :
$rtnavTable.FindFirstElement($RTELEM_TYPE_TABLECELL)
$TXT=""
$TXT=RecupValCELL($rtnavTable)
ConsoleWrite("Premiere Cellule :" & $TXT & @CRLF & " -------------- " & @CRLF)
$Tab[$L][$Z] = $TXT
$TXT=""
;Cellules suivantes
While $rtnavTable.FindNextElement($RTELEM_TYPE_TABLECELL)
If $Z=$nbCol Then
$Z=0
$L=$L+1
EndIf
$Z=$Z+1
$C=$C+1
$TXT=RecupValCELL($rtnavTable)
ConsoleWrite("Cellule N° :" & $C & " | Ligne : " & $L & " | COl : " & $Z & " -->> " & $TXT & @CRLF )
ConsoleWrite( " -------------------------------------------------------------------------- " & @CRLF)
$Tab[$L][$Z] = $TXT
$TXT=""
WEnd
Return $Tab
EndFunc
#Region Programme
; Initialisation de la connexion
$DB=DarabaseCnx($oSession)
; Création de l'objet Workspace
$Ws=ObjWSpace()
$uidoc=$Ws.CurrentDocument
$odoc = $uidoc.Document
$Body = $odoc.GetFirstItem("Body")
$tbl = LectTable($body)
#EndRegion Programme
Je me demande si le souci ne se trouverait pas dans la définition de ma plage :
$rtRangeCell.SetBegin($rtnavTable)
$rtRangeCell.SetEnd($rtnavTable)
Mais comment modifier mon .Setend pour qu'il aille jusqu'au bout ?
( Pour info, je me sert des infos se trouvant sur le site d'Ibm :
http://publib.boulder.ibm.com/infocente ... CRIPT.html )
EDIT :
Solution trouvée. / Sujet clos.
Voir ci-dessous..
Cordialement,
Jordane,