Francois Gatto (xhydrogene) a écrit :



Je cherche des exemples simples de diagramme créés par des macros. Je ne trouve rien (j'ai peut-être mal cherché) dans ce domaine.

As tu regardé ici :
http://www.oooforum.org/forum/viewtopic.phtml?p=75067

François


Comme prévu, je patine sérieux. J'ai essayé de traduire partiellement. Les traducteurs automatiques sont assez marrants. Je suis certain qu'on peut apprendre un tas de choses en partant de cet exemple, s'il marche... En effet, après la création de feuille et son remplissage de données, ça plante avec cette ligne : com_sun_star_util_NumberFormat_DATE = uno.getConstantByName("com.sun.star.util.NumberFormat.DATE")
Comment faire ?
Je joins le listing plus ou moins bien traduit (plutôt mal que bien, mais, bof)





Sub MacroTest

   'créez un nouveau bilan de CALC.
oDoc = StarDesktop.loadComponentFromURL( "private:factory/scalc", "_blank", 0, Array() )
   '#
   ' utilisation ceci à  la place d'ouvrir un document EXISTANT de CALC,
   ' et assignez-lui une variable oDoc.
   '  DOSSIER = "C:\Documents et Settings\danny\Desktop\MyCalc" # Windows
   '  DOSSIER = "/home/danny/Desktop/MyCalc.sxc" # Linux
   '  DOSSIER de URL = de convertToURL(+ "sxc")
'# oDoc = URL de StarDesktop.loadComponentFromURL(, "_ blanc", 0, Array())
   '#

'# voici deux manières d'obtenir l'accès à une des feuilles dans le document. '# notez que ceux-ci ne font pas la feuille * visible *, elles donnent simplement
   '#  accès au contenu de la feuille dans le programme.
oSheet = oDoc.getSheets().getByIndex( 0 ) '# retourne la feuille d'index zéro '#oSheet = oDoc.getSheets().getByName( "Sheet3" ) '# retourne de nom de feuille '#
   '# mettez les chiffres de quelques ventes sur la feuille.
   oSheet.getCellByPosition(0, 0).setString("mois")
   oSheet.getCellByPosition(1, 0).setString("ventes")
   oSheet.getCellByPosition(2, 0).setString("date fin")

   oSheet.getCellByPosition(0, 1).setString("janv.")
   oSheet.getCellByPosition(0, 2).setString("fév.")
   oSheet.getCellByPosition(0, 3).setString("mars")
   oSheet.getCellByPosition(0, 4).setString("avr.")
   oSheet.getCellByPosition(0, 5).setString("mai")
   oSheet.getCellByPosition(0, 6).setString("juin")
   oSheet.getCellByPosition(0, 7).setString("juil.")
   oSheet.getCellByPosition(0, 8).setString("août")
   oSheet.getCellByPosition(0, 9).setString("sept")
   oSheet.getCellByPosition(0, 10).setString("oct.")
   oSheet.getCellByPosition(0, 11).setString("nov.")
   oSheet.getCellByPosition(0, 12).setString("déc")

   oSheet.getCellByPosition(1, 1).setValue(3826.37)
   oSheet.getCellByPosition(1, 2).setValue(3504.21)
   oSheet.getCellByPosition(1, 3).setValue(2961.45)
   oSheet.getCellByPosition(1, 4).setValue(2504.12)
   oSheet.getCellByPosition(1, 5).setValue(2713.98)
   oSheet.getCellByPosition(1, 6).setValue(2248.17)
   oSheet.getCellByPosition(1, 7).setValue(1802.13)
   oSheet.getCellByPosition(1, 8).setValue(2003.22)
   oSheet.getCellByPosition(1, 9).setValue(1502.54)
   oSheet.getCellByPosition(1, 10).setValue(1207.68)
   oSheet.getCellByPosition(1, 11).setValue(1319.71)
   oSheet.getCellByPosition(1, 12).setValue(786.03)

   oSheet.getCellByPosition(2, 1).setFormula("= DATE(2004;01;31)")
   oSheet.getCellByPosition(2, 2).setFormula("= DATE(2004;02;29)")
   oSheet.getCellByPosition(2, 3).setFormula("= DATE(2004;03;31)")
   oSheet.getCellByPosition(2, 4).setFormula("= DATE(2004;04;30)")
   oSheet.getCellByPosition(2, 5).setFormula("= DATE(2004;05;31)")
   oSheet.getCellByPosition(2, 6).setFormula("= DATE(2004;06;30)")
   oSheet.getCellByPosition(2, 7).setFormula("= DATE(2004;07;31)")
   oSheet.getCellByPosition(2, 8).setFormula("= DATE(2004;08;31)")
   oSheet.getCellByPosition(2, 9).setFormula("= DATE(2004;09;30)")
'# notez que ces trois dernières dates ne sont pas fixées car des appels de fonction de DATE().
   oSheet.getCellByPosition(2, 10).setFormula("10/31/2004")
   oSheet.getCellByPosition(2, 11).setFormula("11/30/2004")
   oSheet.getCellRangeByName("C13").setFormula("12/31/2004")
   '#

   '# format les cellules de date comme dates.
com_sun_star_util_NumberFormat_DATE = uno.getConstantByName("com.sun.star.util.NumberFormat.DATE")
   oFormats = oDoc.getNumberFormats()
   oLocale = createUnoStruct( "com.sun.star.lang.Locale" )
nDateKey = oFormats.getStandardFormat( com_sun_star_util_NumberFormat_DATE, oLocale )
   oCell = oSheet.getCellRangeByName("C2:C13")
oCell.NumberFormat = nDateKey
   '# ajoutez maintenant un diagramme au bilan.

oCellRangeAddress = oSheet.getCellRangeByName("A1:B13").getRangeAddress()
   '# oCellRangeAddress = MakeCellRangeAddress(0, 0, 1, 1, 12)
   '# obtenez la collection de diagrammes de la feuille.
   oCharts = oSheet.getCharts()
   '# ajoutez un nouveau diagramme avec un nom spécifique,
   '#  dans un rectangle spécifique à la page de dessin,
   '#  et relié aux cellules spécifiques du bilan.
oCharts.addNewByName( "Sales", makeRectangle( 8000, 1000, 16000, 10000), Array( oCellRangeAddress ), True, True ) '# de la collection de diagrammes, obtenez le nouveau diagramme que nous avons juste créé.
   oChart = oCharts.getByName("ventes")
   '# obtenez le modèle de document de diagramme.
   oChartDoc = oChart.getEmbeddedObject()

   '# obtenez la forme de dessin des textes du titre du diagramme.
   oTitleTextShape = oChartDoc.getTitle()
   '# changement de titre.
   oTitleTextShape.String = "diagramme de ventes"

   '# créez un diagramme.
   oDiagram = oChartDoc.createInstance("com.sun.star.chart.BarDiagram")
   '# placez ses paramètres.
   oDiagram.Vertical = True
   '# faites le diagramme employer ce diagramme.
    oChartDoc.setDiagram(oDiagram)

   '# demandez au diagramme quel diagramme il emploie.
   '# (inutile, puisque oDiagram contient déjà cette valeur.)
   oDiagram = oChartDoc.getDiagram()
   '# faites plus de changements au diagramme.
oDiagram.DataCaption = uno.getConstantByName( "com.sun.star.chart.ChartDataCaption.VALUE" ) oDiagram.DataRowSource = uno.getConstantByName( "com.sun.star.chart.ChartDataRowSource.COLUMNS" )
   '#
   '#
   '# modifiez les feuilles.

   '# insertion six feuilles supplémentaires dans le document.
   nNumSheetsCurrently = oDoc.getSheets().getCount()
   oDoc.getSheets().insertNewByName("Fred", nNumSheetsCurrently+1)
   oDoc.getSheets().insertNewByName("Joe", nNumSheetsCurrently+2)
   oDoc.getSheets().insertNewByName("facture", nNumSheetsCurrently+3)
   oDoc.getSheets().insertNewByName("SAM", nNumSheetsCurrently+4)
   oDoc.getSheets().insertNewByName("Tom", nNumSheetsCurrently+5)
   oDoc.getSheets().insertNewByName("David", nNumSheetsCurrently+6)
   '# maintenant trouvez une feuille appelée "Feuille2" et supprimez-la.
   oDoc.getSheets().removeByName("Feuille2")
'# maintenant trouvez la feuille appelée "SAM" et changez son nom en "Feuille 37"
   oDoc.getSheets().getByName( "Sam" ).Name = "Feuille 37"
   '#
   '#
   '# imprimez maintenant le document -- trois manières différentes.

   '# technique 1.
   '# imprimez maintenant le document en double
   '# les pages 1 à  4, et également la page 10.
   '#
   '# NOTE : nous la ferions aimons ceci, à  moins que le mot "copie"
'# a une signification spéciale dans le python, et ne peut pas être appelé
   '# comme méthode.
    '#oDoc.print(
   '#    Array(
   '#        makePropertyValue( "CopyCount", 2 ),
   '#        makePropertyValue( "Pages", "1-4;10" ) ) )
uno.invoke(oDoc, "print", (Array(makePropertyValue( "CopyCount", 2), makePropertyValue( "Pages", "1-4;10"),)) )
   '# technique 2.
   '# copie le document déjà , sans tous arguments.
   'uno.invoke( oDoc, "print", ( Array(), ) )
   '#oDoc.print( Array() )
'# en utilisant la technique 1 ou 2, soyez sûr de ne pas fermer le document
   '#  jusqu'à l'impression est accompli.
   '#    http://www.oooforum.org/forum/viewtopic.php?p=23144#23144

   '# technique 3.
   '# copie le document en amenant la zone de dialogue de tirage
   '#  pour l'utilisateur à agir l'un sur l'autre avec.
   oDocFrame = oDoc.getCurrentController().getFrame()
oDispatchHelper = createUnoService( "com.sun.star.frame.DispatchHelper" ) oDispatchHelper.executeDispatch( oDocFrame, ".uno:Print", "", 0, Array() )
   '# To learn some more about the dispatcher, see these articles...
   '#    http://www.oooforum.org/forum/viewtopic.php?t=5058
   '#    http://www.oooforum.org/forum/viewtopic.php?t=5057
'#
   '# maintenant sauvegarder le document

   '# CHANGEZ-MOI ! ! !
   '# CHANGEZ-MOI ! ! !
   '# CHANGEZ-MOI ! ! !
   '# préparez le nom de fichier de sauvegarde,
   '# nous allons sauver le dossier dans plusieurs différents formats,
   '#  mais toujours basé sur le même nom de fichier.
   DOSSIER = "C:\Documents et Settings\dbrewer\Desktop\MyCalc" '# Windows
   '# DOSSIER = "/home/danny/Desktop/MyCalc.sxc" # Linux

   '# Sauvegarder le document dans le format natif d'OOo CALC.
   cURL = convertToURL( cFile + ".sxc" )
   oDoc.storeAsURL( cURL, Array() )
'# Sauvegarder le document dans le format Excel
   cURL = convertToURL( cFile + ".xls" )
oDoc.storeToURL( cURL, Array( makePropertyValue( "FilterName", "MS Excel 97" ) ) )

   '# Sauvegarder le document an format pdf.
   cURL = convertToURL( cFile + ".pdf" )
oDoc.storeToURL( cURL, Array( makePropertyValue( "FilterName", "calc_pdf_Export" ) ) )

   '# Sauvegarder le document au format CSV.
   cURL = convertToURL( cFile + ".csv" )
oDoc.storeToURL( cURL, Array( makePropertyValue( "FilterName", "Text - txt - csv (StarCalc)" ) ) )


   '# Sauvegarder le document au format DIF.
   cURL = convertToURL( cFile + ".dif" )
oDoc.storeToURL( cURL, Array( makePropertyValue( "FilterName", "DIF" ) ) )

  ' # Sauvegarder le document au format SYLK.
   cURL = convertToURL( cFile + ".sylk" )
oDoc.storeToURL( cURL, Array( makePropertyValue( "FilterName", "SYLK" ) ) )

   '# Sauvegarder le document au format HTML.
   cURL = convertToURL( cFile + ".html" )
oDoc.storeToURL( cURL, Array( makePropertyValue( "FilterName", "HTML (StarCalc)" ) ) )

'# Une liste de quelques noms de formats de chargements et sauvegardes peut-être trouvée ici :
   '#    http://www.oooforum.org/forum/viewtopic.php?t=3549

   '#
   '# fermez maintenant le document
   oDoc.close(True)
   '#
End Sub




D'avance merci
Bon surf
Christian

--
Visitez http://christianwtd.free.fr/ pour débuter avec Calc, d'OpenOffice.org


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Répondre à