[Résolu] [Basic] Accéder à un document ouvert

Discussions et questions sur tout ce qui concerne la programmation sous StarOffice NeoOffice ou OpenOffice.org tous langages et tous modules confondus.

Modérateur: Vilains modOOos

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu] [Basic] Accéder à un document ouvert

Messagepar Jean-Marc » 01 Nov 2009 23:13

Bonjour,

Pour l'instant ma macro est liè à un document, est peut-être est-ce là une raison de mes problèmes

J'ai un document writer de départ où je consigne dans un formulaire quelques paramètres.
A partir de ce document je lance une macro, qui ouvre une boite de dialogue qui est remplie à l'aide d'information venant d'une feuille calc que j'ouvre pour l'occasion.

La boite de dialogue apparait bien, les infos récupérées de la feuilles calc sont dans la boite de dialogue. Un bouton me permet de charger un fichier en passant par un sub qui utilise "com.sun.star.ui.dialogs.FilePicker".
Ce point là ne fonctionne pas.

il ne fonctionne seulement que lorsque je ne charge pas mon fichier calc.

Je suppose que le document de départ (qui contient la macro) n'est plus activé d'ou le problème

Peut-on avoir la liste des documents ouverts et les activer tour à tour
y-a-t'il un service à partir de StarDesktop pour cette fonction

Merci de me répondre
Dernière édition par Jean-Marc le 16 Nov 2009 11:40, édité 1 fois au total.
OpenOffice 3.0.0 OOO300m7 (Build:9354) sous LINUX Mandriva 2009 GNOME 2.24.0
OpenOffice 3.0.0 OOO300m9 (Build:9358) sous Window XP familiale
Jean-Marc
Membre OOorganisé
Membre OOorganisé
 
Messages: 91
Inscrit le: 06 Fév 2007 22:31
Localisation: Boulogne sur mer

Re: [Basic] Accéder à un document ouvert

Messagepar Alain de La Chaume » 02 Nov 2009 10:28

Bonjour à tous, bonjour Jean-Marc
Peut-on avoir la liste des documents ouverts

Code: Tout sélectionner   AgrandirRéduire
REM  *****  BASIC  *****
option explicit

sub main()
   enumDocs(true)
end sub

'------------------------------------------------------------ 07/09/09
' Enumérer les documents ouverts
' Si bFullPath, afficher le chemin complet
'---------------------------------------------------------------------
sub enumDocs(optional bFullPath as boolean)
dim coDocs as object
dim oDoc as object
dim sUrl as string
dim sFicName as string
dim bufTmp as string
dim bufOut as string
dim cr as string
dim oFenetre as object

   cr = chr(13)
   ecrit "JEXDOC"
   bufOut =  cr & "NOMS DES DOCUMENTS OPENOFFICE OUVERTS" & cr _
             & string(71,"=") & cr

   on error resume next   ' Voir Prog-OOO page 166
   coDocs = starDesktop.components.createEnumeration
   while coDocs.hasMoreElements
      oDoc = coDocs.nextElement
      sUrl = oDoc.getUrl
      bufTmp = left(sUrl,4)
      if (strcomp(bufTmp,"file",0) = 0) then
         if bFullPath then
            sFicName = convertFromUrl(sUrl)
            bufOut = bufOut & sFicName & cr
         else
            sFicName = convertFromUrl(acGetFileName(sUrl))
            bufOut = bufOut & sFicName & " (" & oDoc.title & ") " & cr
         end if
      else
         print "Not a file : " & sUrl
      end if
   wend
   ecrit bufOut
end sub

'******************************************************* 07/11/08 ***
'*** Retourne le nom du fichier avec son extension
'*** Ex. : buf = acGetFileName(oDoc.getUrl)
'********************************************************************
function acGetFileName(sUrl As String) As String
Dim cpt As Integer
Const SLASH = "/"
   for cpt = Len(sUrl)  to 1 step -1
      if Mid(sUrl, cpt, 1) = SLASH then
         acGetFileName = Mid(sUrl, cpt +1)
         exit function
      end if
   next cpt
   ' Si pas de SLASH, on retourne tout
   acGetFileName = sUrl
end function

'---------------------------------------------------------- 21/06/2009
' Si buf1 = "JEXDOC", effacer contenu oDoc
' Sinon, érire buf1 à la fin du document oDoc
'---------------------------------------------------------------------
sub ecrit(buf1, Optional bFinPg, Optional oDoc)   

dim iFinParag as integer
dim oText as object
dim oCurs as object
   
   If IsMissing(bFinPg) then bFinPg = true
   if IsMissing(oDoc) then oDoc = thisComponent      

   if (buf1 = "JEXDOC") then
         ' Effacer contenu oDoc
         oDoc.text.string = ""
         exit sub             ' >>>>>>> SORTIE >>>>>>>
   end if
   
   iFinParag = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
   oText = oDoc.text
   oCurs = oText.createTextCursor
   oCurs.gotoEnd(false)
   oCurs.string = buf1
   oCurs.gotoEnd(false)
   ' Ajouter code de fin de paragraphe, si demandé
   if(bFinPg) then _
      oText.insertControlCharacter(oCurs, iFinParag, false)
end sub


J'ai aussi trouvé ça au fond de mes tiroirs :
Code: Tout sélectionner   AgrandirRéduire
REM  *****  BASIC  *****
option explicit

sub main()
dim buf as string

   buf = docActiver
   ecrit "JEXDOC"
   ecrit chr(13) & "LISTE DES FENETRES ACTIVEES :"
   ecrit chr(13) & buf
end sub


function docActiver() as string
dim coDocs as object
dim oDoc as object
dim oFrame as object
dim bufOut as string

   on error resume next   ' Voir Prog-OOO page 166
   coDocs = starDesktop.components.createEnumeration
   while coDocs.hasMoreElements
      oDoc = coDocs.nextElement
      bufOut = bufOut & oDoc.implementationName & " : " & oDoc.title & chr(13)
      oFrame = oDoc.currentController.frame
      oFrame.getContainerWindow.setFocus
      wait 1500
   wend
   docActiver = bufOut
end function

'---------------------------------------------------------- 21/06/2009
' Si buf1 = "JEXDOC", effacer contenu oDoc
' Sinon, érire buf1 à la fin du document oDoc
'---------------------------------------------------------------------
sub ecrit(buf1, Optional bFinPg, Optional oDoc)   

dim iFinParag as integer
dim oText as object
dim oCurs as object
   
   If IsMissing(bFinPg) then bFinPg = true
   if IsMissing(oDoc) then oDoc = thisComponent      

   if (buf1 = "JEXDOC") then
         ' Effacer contenu oDoc
         oDoc.text.string = ""
         exit sub             ' >>>>>>> SORTIE >>>>>>>
   end if
   
   iFinParag = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
   oText = oDoc.text
   oCurs = oText.createTextCursor
   oCurs.gotoEnd(false)
   oCurs.string = buf1
   oCurs.gotoEnd(false)
   ' Ajouter code de fin de paragraphe, si demandé
   if(bFinPg) then _
      oText.insertControlCharacter(oCurs, iFinParag, false)
end sub
Bien cOOordialement, Alain
API-culteur et pêcheur de macros avec OOo 3.1.1 version officielle sous Linux Ubuntu 8.04
Pour rechercher efficacement dans ce forum
Le SDK nouveau (3.1.1) est arrivé ici !
Avatar de l’utilisateur
Alain de La Chaume
Membre cOOonverti
Membre cOOonverti
 
Messages: 354
Inscrit le: 28 Sep 2008 14:56
Localisation: Complètement à l'Ouest

Re: [Basic] Accéder à un document ouvert

Messagepar Jean-Marc » 02 Nov 2009 22:33

Merci Alain
Les codes me semblent intéressants, Je n'aurais pas beaucoup le temps de les exploiter ce soir.
Merci en attendant.
je donnerai suite le plus rapidement possible, je part en voyage et ne suis pas sûr de pouvoir me connecter
OpenOffice 3.0.0 OOO300m7 (Build:9354) sous LINUX Mandriva 2009 GNOME 2.24.0
OpenOffice 3.0.0 OOO300m9 (Build:9358) sous Window XP familiale
Jean-Marc
Membre OOorganisé
Membre OOorganisé
 
Messages: 91
Inscrit le: 06 Fév 2007 22:31
Localisation: Boulogne sur mer

Re: [Basic] Accéder à un document ouvert

Messagepar Jean-Marc » 15 Nov 2009 22:41

Me voici, de retour et je vais reformuler ma question.
Merci tout d'abord à Alain, pour son aide, mais faute d'être clair de ma part ça ne répond pas à mon problème

Je construits actuellement des macros à partir d'un document principale, dans lequel les utilisateur sont invités à mettre dans le formulaire quelques paramètres.
Ma macro de départ charge ces paramètres, ouvre des feuilles d'un classeur pour chercher des données, ferme le classeur, ouvre ensuite un formulaire à traiter, avant d'afficher la première boîte de dialogue cette macro extrait des données, et les places dans la première boite de dialogue. Tout semble bien fonctionner à l'affichage de cette boite de dialogue.

sauf que toute action sur les boutons liés à des macros est voué à l'echec.
je pensais un moment que le fait d'ouvrir un autre fichier, ces boutons ne pouvaient plus accéder a la bibliothèque liée, au premier document.
j'ai donc fermé, le dernier document avant l'affichage de la boite de dialogue, mais sans succès .

je joins les quelques fichier de mon travail. La macro est sur le fichier .Macro correction....odt

Merci pour votre aide
Pièces jointes
macro_correction.zip
Il n'y a pas de traitement d'erreur, dans cette macro, ne pas placer dans un répertoire avec des noms à la windows merci
(80.48 Kio) Téléchargé 2 fois
OpenOffice 3.0.0 OOO300m7 (Build:9354) sous LINUX Mandriva 2009 GNOME 2.24.0
OpenOffice 3.0.0 OOO300m9 (Build:9358) sous Window XP familiale
Jean-Marc
Membre OOorganisé
Membre OOorganisé
 
Messages: 91
Inscrit le: 06 Fév 2007 22:31
Localisation: Boulogne sur mer

Re: [Basic] Accéder à un document ouvert

Messagepar Bidouille » 16 Nov 2009 11:25

Bonjour,

Jean-Marc a écrit:Merci tout d'abord à Alain, pour son aide, mais faute d'être clair de ma part ça ne répond pas à mon problème

Il me semble que votre question d'origine a obtenu une réponse.

Ce que vous appelez "reformulation" doit pour moi faire l'objet d'un nouveau fil. Ceci afin que nous puissions avoir une base de connaissance efficace lors d'une recherche sur un seul de vos problèmes.

Merci de votre collaboration et de clôturer ce sujet en ajoutant la balise [Résolu] accompagnée de l'icône Image
Avatar de l’utilisateur
Bidouille
RespOOonsable forum
RespOOonsable forum
 
Messages: 4259
Inscrit le: 08 Nov 2005 18:23
Localisation: Saumur, France


Retour vers Macros et API

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Google [Bot] et 1 invité