[VB] - Récupération de données dans. LOTUS NOTES [Résolu]

jordane45 21395 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 15 juin 2018 Dernière intervention - 18 juin 2012 à 07:49 - Dernière réponse : jordane45 21395 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 15 juin 2018 Dernière intervention
- 19 juin 2012 à 07:41
Bonjour,

Bien que je ne sois pas en train de développer proprement dit en VB, le langage s'en rapproche énormément ( je travail sous AUTOIT ).
Enfin bon.. Le souci n'est pas là...

Je cherche à récupérer un tableau contenu dans un document Lotus notes.
Lorsque ce tableau fait une taille supérieur à 205 cellules, 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 :
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
NotesRichTextItem.GetFormattedText
NotesRichTextItem.GetUnformattedText

mais malheuresement 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 :
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






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 ?

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
jordane45 21395 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 15 juin 2018 Dernière intervention - 19 juin 2012 à 07:41
3
Merci
Bonjour,

Donc après plusieurs recherches, et en croisant différents scripts trouvés ça et là sur le net .. ( dont plusieurs sur le site d'IBM), j'ai fini par trouver la solution.

Bien que ce script soit écrit pour Autoit, vous pouvez facilement le "convertir" en VB.

A titre d'info, voici le script en question.
#region Includes
#include<file.au3>
#include
#include<./LotusNotes_UDF.au3>
#Include <Excel.au3>
#Endregion Includes

#region Variables
;Variable Tableau pour stocker les données..
Global $Tab[1][1]
;Variables pour NOTES
Global $RTELEM_TYPE_TABLE = 1
Global $RTELEM_TYPE_TABLECELL = 7
Global $RTELEM_TYPE_TEXTPARAGRAPH = 4
Global $RTELEM_TYPE_SECTION = 6
Dim $oSession
Dim $document
Dim $rtitem
Dim $rtnavTable
Dim $rtrangeCell
Dim $rtnavCell
Dim $rtnavflag
Dim $rtt
Dim $rtnav
Dim $rtrangePara
Dim $cellCounter
#endregion

;----------------------------------------
;Connexion à NOTES
;----------------------------------------
$oSession=CnxNotes()

;----------------------------------------
;Connexion à la base
;----------------------------------------
$DB=DarabaseCnx($oSession)
$Ws=ObjWSpace()

; Initialisation document
$uidoc=$Ws.CurrentDocument
$odoc = $uidoc.Document
$rtitem=$odoc.GetFirstItem("Body")

;Accède à la première Table
$rtnav = $rtitem.CreateNavigator
$rtnav.FindFirstElement($RTELEM_TYPE_TABLE)
$rtt = $rtnav.GetElement

;Initialisation du Navigator et des plages
$rtnavTable = $rtitem.CreateNavigator
$rtrangeCell = $rtitem.CreateRange
$rtrangePara = $rtitem.CreateRange

;Première Cellule
$rtnavTable.FindFirstElement($RTELEM_TYPE_TABLECELL)
$rtRangeCell.SetBegin($rtnavTable)
$rtRangeCell.SetEnd($rtnavTable)
$rtnavCell = $rtRangeCell.Navigator

;Nb Lignes / Colonnes dans le tableau
$nblignes = $rtt.RowCount
$Nbcol = $rtt.ColumnCount
; Redimensionnement de l'Array
ReDim $Tab[$nblignes+1][$Nbcol + 1 ]
$Tab[0][0]=$nblignes
$Tab[0][1]=$Nbcol

; On parcour les différentes cellules
For $i = 1 To $nblignes ; Boucle Lignes
For $j = 1 To $Nbcol ; Boucle Colonnes
;--------------------------------------------------
TrayTip("Progression..",$I & " / " & $nblignes & @CRLF & $J & " / " & $Nbcol & @CRLF ,100)
;--------------------------------------------------
$celltext = ""
$cellCounter = $cellCounter + 1
;--------------------------------------------------
;' Premier paragraphe dans la cellule
$rtnavCell.FindFirstElement($RTELEM_TYPE_TEXTPARAGRAPH)
$rtRangePara.SetBegin($rtnavCell)
$rtRangePara.SetEnd($rtnavCell)
$celltext = $celltext & $rtRangePara.TextParagraph & @CRLF
;Récup de chaque paragraphe dans la cellule
While $rtnavCell.FindNextElement($RTELEM_TYPE_TEXTPARAGRAPH)
$rtRangePara.SetBegin($rtnavCell)
$rtRangePara.SetEnd($rtnavCell)
$celltext = $celltext & $rtRangePara.TextParagraph & @CRLF
wend

ConsoleWrite( @CRLF & ">> ------- Cell " & $cellCounter & " - " & $i & " - " & $j & @CRLF & $celltext & @CRLF & ">-----------------------------<"  & @CRLF)

;Next Cellule
$rtnavTable.FindNextElement($RTELEM_TYPE_TABLECELL)
$rtrangeCell.SetBegin($rtnavTable)
$rtnavCell = $rtrangeCell.Navigator
;--------------------------------------------------
$Tab[$I][$J] = $celltext
Next
Next

;Affichage du résultat..
_ArrayDisplay($Tab)




Encore merci a ceux qui ont bien voulu cherché à m'aider.

Bonne journée


Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI

Merci jordane45 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 130 internautes ce mois-ci

Commenter la réponse de jordane45
mjpmjp 115 Messages postés dimanche 6 avril 2003Date d'inscription 29 juin 2012 Dernière intervention - 18 juin 2012 à 11:41
0
Merci
bonjour
Je peux récupérer l'intégralité de mon champ body
est ce que c'est ce que tu veux recuperer (total des data)
et qui correspond a
[u]Nb Lignes = 69
Nb Colonnes = 6
Commenter la réponse de mjpmjp
mjpmjp 115 Messages postés dimanche 6 avril 2003Date d'inscription 29 juin 2012 Dernière intervention - 18 juin 2012 à 11:45
0
Merci
bonjour
+++MESSAGE INCOMPLET+++
bon je reprends

bonjour
Je peux récupérer l'intégralité de mon champ body
est ce que c'est ce que tu veux recuperer (total des data)
et qui correspond a
[u]Nb Lignes = 69
Nb Colonnes = 6
Nb Cells = 414/u

peut tu reconstituer le tableau 69*6=414 ?

a tu vu la structure des data (dans .txt...)?
y a t il un separateur ("," ";"...)?

@+JP
Commenter la réponse de mjpmjp
Utilisateur anonyme - 18 juin 2012 à 17:51
0
Merci
Bonjour,

M'est avis que tu aurais peut-être plus de chance en allant à la source.
Commenter la réponse de Utilisateur anonyme
jordane45 21395 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 15 juin 2018 Dernière intervention - 18 juin 2012 à 20:18
0
Merci
Bonjour...
bon en faite j'ai fini par réussir...
je posterai la réponse demain et je clôturerai le sujet

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.