Open Office Basic : exportation de diagrammes de Calc vers Writer.

Open Office Basic : exportation de diagrammes de Calc vers Writer. - Divers - Programmation

Marsh Posté le 22-07-2008 à 15:52:20    

Bonjour,
je ne sais pas si je suis dans la bonne rubrique. Je demande aux modos, svp, de bien vouloir déplacer mon topic au bon endroit si je l'ai mal placé.
 
Voici mon problème,
j'ai un document Calc sur lequel je crée moi-même des diagrammes en ligne de code. Ca marche, là il n'y a pas de soucis.
Le problème vient maintenant, je souhaite exporter (en ligne de code bien évidemment) ces diagrammes vers un document Writer créer au préalable.
Je me suis renseigner avec le forum http://user.services.openoffice.org/fr/forum/ mais le problème est qu'il y a peu de personnes qui le fréquentent. Du coup, ça fait une semaine que j'attends un coup de pouce en vain. Et ça me bloque terriblement car je ne peux pas avancer mon projet.
 
Un forumeur d'Open Office m'a donné un morceau de code qui ferait globalement ce que je veux.  
 
Voici le code en question :
 

Code :
  1. Sub ExporterGraphWriter
  2. Dim oDoc, oDocCtrl, oSheet as Object
  3. Dim oDrawPage, oShape as Object
  4. Dim lfound as Boolean
  5. Dim i, nNumShapes as Integer
  6. Dim oDispatchHelper,oDocFrame as Object
  7. Dim Url1, Url2 As String
  8. Dim oWriterDoc, oWriterDocCtrl, oWriterDocFrame
  9. ' Get one of the document's controllers.
  10. oDoc = ThisComponent
  11. oDocCtrl = oDoc.getCurrentController()
  12. lFound = False
  13. ' Search the draw page for the chart.
  14. oSheet = oDoc.getSheets().getByIndex( 0 )
  15. oDrawPage = oSheet.getDrawPage()
  16. nNumShapes = oDrawPage.getCount()
  17. For i = 0 to nNumShapes-1
  18.  oShape = oDrawPage.getByIndex( i )
  19.  ' Can't call supportsService unless the com.sun.star.lang.XServiceInfo is present.
  20.  If HasUnoInterfaces( oShape, "com.sun.star.lang.XServiceInfo" ) Then
  21.   If oShape.supportsService( "com.sun.star.drawing.OLE2Shape" ) Then
  22.   ' Is it a Chart?
  23.    If oShape.CLSID = "12DCAE26-281F-416F-a234-c3086127382e" Then
  24.    ' Select the chart shape.
  25.     oDocCtrl.select( oShape )
  26.     lFound = True
  27.    EndIf
  28.   EndIf
  29.  EndIf
  30. Next
  31.  
  32. If lFound Then
  33.  oDispatchHelper = createUnoService( "com.sun.star.frame.DispatchHelper" )
  34.  oDocFrame = oDocCtrl.getFrame()
  35.  oDispatchHelper.executeDispatch( oDocFrame, ".uno:Copy", "", 0, Array() )
  36.  'Url1 = "private:factory/swriter"
  37.  Url1 = "file:///C:/test/modele.ott"
  38.  Url2 = "file:///C:/test/rapport2008.odt"
  39.  oWriterDoc = StarDesktop.loadComponentFromURL( Url1, "_blank", 0, Array() )
  40.  oWriterDocCtrl = oWriterDoc.getCurrentController()
  41.  oWriterDocFrame = oWriterDocCtrl.getFrame()
  42.  oDispatchHelper.executeDispatch( oWriterDocFrame, ".uno:Paste", "", 0, Array() )
  43.  oWriterDoc.storeAsURL(Url2, Array())
  44.  oWriterDoc.Close(true)
  45. EndIf
  46. End Sub


Le problème est que j'ai du mal à comprendre en détail les lignes de ce code et en particulier ce que font les variables "oShape", "oDocCtrl", "oDocFrame"
 
Ensuite l'URL1, correspond à quel document? Car l'URL2 ok, c'est le fichier writer. Mais l'URL1?
 
Enfin à quoi servent les outils "HasUnoInterfaces,supportsService, getDrawPage et getCount".
 
Merci de votre collaboration
 
nb : si vous avez besoin d'informations supplémentaires, n'hésitez pas à me demander. :)


Message édité par slr56 le 23-07-2008 à 10:21:08
Reply

Marsh Posté le 22-07-2008 à 15:52:20   

Reply

Marsh Posté le 22-07-2008 à 20:29:01    

up
 
C'est très important. svp


Message édité par slr56 le 22-07-2008 à 20:29:21
Reply

Marsh Posté le 23-07-2008 à 08:28:47    

up

Reply

Marsh Posté le 23-07-2008 à 10:02:18    

Je pense avoir compris le fonctionnement. Ce que je veux savoir c'est à quoi correspond l'adresse URL1 à la ligne 39?
De l'aide svp.

 

Et dans la partie suivante, je voudrais savoir ce que signifie les lignes 6 à 8 :

Code :
  1. oDoc = ThisComponent
  2. oDocCtrl = oDoc.getCurrentController()
  3. lFound = False
  4. oSheet = oDoc.getSheets().getByIndex( 0 )
  5. oDrawPage = oSheet.getDrawPage()
  6. nNumShapes = oDrawPage.getCount()
  7. For i = 0 to nNumShapes-1
  8.   oShape = oDrawPage.getByIndex( i )
 

Aidez-moi svp!


Message édité par slr56 le 23-07-2008 à 14:54:35
Reply

Marsh Posté le 23-07-2008 à 11:34:26    

svp

Reply

Marsh Posté le 23-07-2008 à 18:43:33    

Regarde cette URL : http://api.openoffice.org/docs/com [...] ment.html.
Puis cette URL : http://api.openoffice.org/docs/com [...] lier.html. mauvaise nouvelle, getDrawPage est "deprecated" donc il est déconseillé de l'utiliser.
Puis celle-ci : http://api.openoffice.org/docs/com [...] Page.html.
En fait celà te permets me semble-t-il de savoir combien il y a de "shapes" dans ta page et de les obtenir par leur numéro d'index dans la page.
Que représente un Shape, alors là ...
 

Reply

Marsh Posté le 24-07-2008 à 08:24:22    

je suppose que le programmeur qui m'a donné ce code sous-entendait "diagramme" par "shape" même si le nom en anglais est "chart", non?

Message cité 1 fois
Message édité par slr56 le 24-07-2008 à 08:24:29
Reply

Marsh Posté le 24-07-2008 à 11:08:05    

slr56 a écrit :

je suppose que le programmeur qui m'a donné ce code sous-entendait "diagramme" par "shape" même si le nom en anglais est "chart", non?

Ayant égaré par mégarde ma boule de cristal ...
Tu as testé le code fourni ?
 
Pour l'URL1 tu peux trouver les explications des extensions sur Google :"extension .ott" ==>  http://www.fileinfo.net/extension/ott
 
Il faut aussi s'habituer au vocabulaire des API OpenOffice,  ce n'est pas forcément simple  :pt1cable:  

Reply

Marsh Posté le 24-07-2008 à 16:17:26    

salut Trap D,
 
je ne sais pas pourquoi mais lorsque j'ouvre les liens que tu m'as posté, j'arrive sur le site http://api.openoffice.org/docs/com [...] ment.html.
et j'obtiens ceci :
Error
 
No matches to your request were found.
 
Possible causes
 
    * Incorrect URL. Check spelling and try again.
    * Link does not exist. Use the browser's "back" button to return to the referring page.

Reply

Marsh Posté le 24-07-2008 à 23:41:10    

slr56 a écrit :

salut Trap D,
 
je ne sais pas pourquoi mais lorsque j'ouvre les liens que tu m'as posté, j'arrive sur le site http://api.openoffice.org/docs/com [...] ment.html.
et j'obtiens ceci :
Error
 
No matches to your request were found.

A ben oui, dis donc, moi aussi  :heink:  
J'avais simplement fait Google + getSheets().
Essaye.
Après j'avais fait Google + getDrawPage()
 
 

Reply

Marsh Posté le 24-07-2008 à 23:41:10   

Reply

Marsh Posté le 28-07-2008 à 14:41:10    

Trap D a écrit :

A ben oui, dis donc, moi aussi  :heink:  
J'avais simplement fait Google + getSheets().
Essaye.
Après j'avais fait Google + getDrawPage()
 
 


 
j'ai fait la recherche via Google et j'ai eu les pages merci.  ;)  Quelle est la différence... bonne question.. Bref

Reply

Marsh Posté le 28-07-2008 à 14:41:19    

J'ai réussi ENFIN à comprendre le code que j'ai posté précédemment. Et voici que j'ai fait. Je n'ai plus d'erreur :):):) ...mais mon diagramme n'est toujours pas exporté  :pfff:  :pfff:  :(:(:(

 
Code :
  1. 'EXPORTATION DES DIAGRAMMES
  2. 'Document actif
  3. Dim monDoc_Writer
  4. Dim copie_graph_1 as Object
  5. Dim mon_frame1 as object
  6. Dim mon_Url as string
  7. Dim monDoc_exp as object
  8. Dim maFeuille_exp as Object
  9. Dim mesFeuilles_exp as Object
  10. Dim mon_control_doc_writer
  11. monDoc_exp=ThisComponent
  12. mesFeuilles_exp=monDoc_exp.getCurrentController()
  13. maFeuille_exp=monDoc_exp.getSheets().getByName("f_program" )
  14. If HasUnoInterfaces( graphique_1, "com.sun.star.lang.XServiceInfo" ) Then
  15.    If graphique_1.supportsService( "com.sun.star.drawing.OLE2Shape" ) Then
  16.       If graphique_1.CLSID = "12DCAE26-281F-416F-a234-c3086127382e" Then
  17.       maFeuille_exp.select(graphique_1)
  18.       Endif
  19.    Endif
  20. Endif
  21. copie_graph_1 = createUnoService( "com.sun.star.frame.DispatchHelper" )
  22. mon_frame1=ThisComponent.CurrentController.Frame
  23. copie_graph_1.executeDispatch( mon_frame1, ".uno:Copy", "", 0, Array() )
  24. mon_Url="file:///D:/"&"synthese_" & DatePart("yyyy", date)& "_" & DatePart("m", date)& "_" & DatePart("d", date) & ".doc"
  25. monDoc_Writer = StarDesktop.loadComponentFromURL(mon_Url, "_blank", 0, Array() )
  26. mon_control_doc_writer=monDoc_Writer.getCurrentController()
  27. mon_writer_doc_frame=mon_control_doc_Writer.getFrame()
  28. copie_graph_1.executeDispatch( mon_writer_doc_frame, ".uno:Paste", "", 0, Array() )
  29. 'ferme le document
  30. monDoc_Writer.Close(true)
 


Quelqu'un sait d'où vient le problème?


Message édité par slr56 le 28-07-2008 à 17:10:35
Reply

Marsh Posté le 29-07-2008 à 09:18:58    

up
Comment puis-je vérifier qu'à la ligne 20, "maFeuille_exp.select(graphique_1)" la variable "maFeuille_exp" prend bien l'objet graphique_1?

Reply

Marsh Posté le 29-07-2008 à 11:42:37    

help

Reply

Marsh Posté le 29-07-2008 à 16:26:07    

up :'(:'(:'(:'(:'(:'(:'(:'(:'(:'(

Reply

Marsh Posté le 29-07-2008 à 21:01:53    

s'il vous plait, aidez-moi

Reply

Marsh Posté le 30-07-2008 à 09:55:03    

up

Reply

Marsh Posté le 30-07-2008 à 15:32:11    

help me Desperate HouseMan... :'(:'(:'(:'(:'(:'(:'(:'(:'(

Reply

Marsh Posté le 30-07-2008 à 16:51:53    

personne ne code jamais en OOBasic??????

Reply

Marsh Posté le 31-07-2008 à 09:48:09    

up

Reply

Marsh Posté le 31-07-2008 à 11:42:19    

Apparemment pas beaucoup sur ce forum, il y a des ML spécialisées : http://user.services.openoffice.org/fr/forum/

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed