[Résolu][Calc] Graphiques "à la volée" via un format DEQUADO

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

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 !
SmPNRM
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 15 sept. 2020 12:05

[Résolu][Calc] Graphiques "à la volée" via un format DEQUADO

Message par SmPNRM »

Bonjour à tous,

Je travaille dans le domaine des bassins versants de cours d'eau et les données de qualité physico-chimique des eaux sont bancarisées au "format" DEQUADO, correspondant à une structure de champs définis sous format Excel.

Chaque ligne correspond au résultat de l'analyse d'un paramètre pour une station (lieu) sur à une date donnée avec :
- en colonne A : le code station
- en colonne F : la date et l'heure de prélèvement
- en colonne L : le code paramètre
- en colonne R : le résultat de l'analyse

Je souhaiterais à partir de cette grosse base de données (6 prélèvements/an/stations*20 paramètres*200 stations) donc à la grosse 24 000 lignes, générer un diagramme XY "Points et lignes" par couple station/paramètre (colonne A/colonne L) (soit environ 4 000 graphes, le nombre étant la raison première de ce post), avec :
- en X : la date (colonne F)
- en Y : le résultat de l'analyse (colonne R)

Idéalement, apparaîtrait sur le graphe en titre : Le nom du paramètre (Colonne U), l'unité du paramètre (Colonne T) et le code station (Colonne A).
Ces graphes pourraient être générés dans des nouvelles feuilles ou des nouveaux fichiers, selon ce qui est possible de faire.

Est-ce que cette automatisation vous parait-elle techniquement faisable, et si oui, je serais preneur de vos propositions pour y parvenir.
En vous remerciant d'avance de vos réponses.

Bien cordialement,
Dernière modification par micmac le 19 oct. 2020 08:11, modifié 2 fois.
Raison : Balisage dans le 1er message
LibreOffice 6.4 sur Windows 10
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9251
Inscription : 28 août 2010 08:45

Re: Graphiques "à la volée" à partir d'un format DEQUADO

Message par micmac »

Bonjour,

Joignez un extrait de votre document débarrassé d'éléments confidentiels ou un document reproduisant le problème. Vous faciliterez le travail des bénévoles qui vont vous aider en leur évitant de jouer aux devinettes.
Comment joindre un fichier.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25167
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Graphiques "à la volée" à partir d'un format DEQUADO

Message par Dude »

Salut,

A priori, je ne vois pas le besoin de macro dans cette problématique.
SmPNRM a écrit :donc à la grosse 24 000 lignes, générer un diagramme XY "Points et lignes"
Commence déjà par voir si avec Calc, tu arrives à réaliser ce graphique "à la main".
Si oui, fais ce que demande le modo et fournis ce document.
On verra ensuite ce les possibles possibilités dans l'automatisation.
SmPNRM
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 15 sept. 2020 12:05

Re: Graphiques "à la volée" à partir d'un format DEQUADO

Message par SmPNRM »

Bonjour à tous,

Vous trouverez ci-joint un fichier exemple sur 3 campagnes de prélèvements avec une quinzaine de paramètres analysés et 9 stations suivies.
L'idée étant de trouver une manip' qui permette de générer les 141 graphes d'un coup, si c'est techniquement faisable.

En vous remerciant d'avance de vos orientations et propositions.

Bien cordialement,
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.4 sur Windows 10
medland
Fraîchement OOthentifié
Messages : 7
Inscription : 03 août 2020 09:32

Re: Graphiques "à la volée" à partir d'un format DEQUADO

Message par medland »

Bonjour,
SmPNRM a écrit :L'idée étant de trouver une manip' qui permette de générer les 141 graphes d'un coup, si c'est techniquement faisable.
141 graphiques qui auraient quelle forme ?
Parce que le document que tu fournis n'en contient aucun.
Open Office 4.1.7 Win7
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 626
Inscription : 09 août 2017 22:15

Re: Graphiques "à la volée" à partir d'un format DEQUADO

Message par Jurassic Pork »

hello,
avant de vouloir fabriquer tous les graphes automatiquement, il faudrait que tu essaies d'en générer un manuellement. Tu t'apercevrais alors que les données telles qu'elles sont actuellement dans ton classeur ne permettent pas de générer de graphes.

1 - Les données qui sont en colonne F ne sont pas en format Date mais en format Texte
2 - Les données qui sont en colonne R ne sont pas dans un format qui comprend le . en séparateur décimal.

pour le 1 on peut par exemple utiliser Données/Texte en colonne pour convertir en format date
pour le 2 utiliser dans Nombre / Langue le Français/Suisse qui utilise le . comme séparateur décimal.

On pourrait alors générer un graphe de ce genre :
CalcGraphe.PNG

ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 626
Inscription : 09 août 2017 22:15

Re: Graphiques "à la volée" à partir d'un format DEQUADO

Message par Jurassic Pork »

hello,
Finalement dans le cas présent, le mieux serait de générer les graphes dans des fichiers PDF multipages. Soit un fichier par station ou soit un fichier par type de mesures. Pour générer ces fichiers PDF, le mieux serait d'utiliser le module python matplotlib qui offre des possibilités de génération de graphes et de sortie dans des fichiers PDF. Donc nous allons utilisé un script python pour réaliser l'opération.
Pour bien utiliser les scripts Python sous OpenOffice/LibreOffice, il faut installer l'extension APSO
Je ne sais pas si cela a été fait avant mais je viens de découvrir que l'on peut facilement inclure des modules/paquets du dépôt pypi dans le python d'OpenOffice/LibreOffice sous windows (du moins certains). Voici dans un premier temps comment faire :

Installation d'un module/paquet python du dépôt pypi pour utilisation dans OpenOffice/LibreOffice sous windows

1 - Récupérer le script python get-pip.py
2 - Mettre le fichier dans le répertoire program d'OpenOffice/LibreOffice
3 - Ouvrir une invite de commande (cmd.exe) en tant qu'administrateur et se positionner dans le répertoire program d'OpenOffice/LibreOffice
4 - Lancer la commande python.exe get-pip.py. Ceci installe pip.
5 - Maintenant si tout c'est bien passé vous pouvez charger les modules/paquets qui se trouvent dans le dépôt pypi.
6 - Exemple pour charger le paquet matplotlib :
Ouvrir une invite de commande (cmd.exe) en tant qu'administrateur et se positionner dans le répertoire program d'OpenOffice/LibreOffice. Lancer la commande python-core-<version de python>\Scripts\pip install matplotlib

==========================================
traitement fichier DEQUADO initial :
Mise en forme préalable :
1 - Sélectionner tous les éléments de la colonne F et faire une conversion Données/texte en colonnes...
type de colonne : Date(JMA)
2 - Sélectionner tous les éléments de la colonne R et faire une conversion Données/texte en colonnes...
type de colonne : Anglais US
3 - Trier l'ensemble des données utiles suivant les critères suivants :
Colonne A puis Colonne U puis Colonne F

Voici le script python qui génère les graphes dans un seul fichier PDF :

Code : Tout sélectionner

# coding: utf-8
# Jurassic Pork Octobre 2020
from __future__ import unicode_literals
import uno
import datetime as dt
import numpy as np
import matplotlib
matplotlib.use('agg')
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

def floatHourToTime(fh):
    h, r = divmod(fh, 1)
    m, r = divmod(r*60, 1)
    return (
        int(h),
        int(m),
        int(r*60),
    )

def convert_excel_time(excel_time):
    mydt = dt.datetime.fromordinal(dt.datetime(1900, 1, 1).toordinal() + int(excel_time) - 2)
    hour, minute, second = floatHourToTime(excel_time % 1)
    mydt = mydt.replace(hour=hour, minute=minute, second=second)
    return mydt
    
def matplot():
    oDoc = XSCRIPTCONTEXT.getDocument()
    oSheet = oDoc.CurrentController.ActiveSheet

# Create the PdfPages object to which we will save the pages:
# The with statement makes sure that the PdfPages object is closed properly at
# the end of the block, even if an Exception occurs.
    with PdfPages('c:/temp/mesures_Dequado.pdf') as pdf:
        plt.figure(figsize=(3, 3))
        plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o')
        plt.title('Page One')
        pdf.savefig()  # saves the current figure into a pdf page
        plt.close()
    
        plt.rcParams['text.usetex'] = False
        plt.figure(figsize=(8, 6))
        x = np.arange(0, 5, 0.1)
        plt.plot(x, np.sin(x), 'b-')
        plt.title('Page Two')
        pdf.attach_note("plot of sin(x)")  # attach metadata (as pdf note) to page
        pdf.savefig()
        plt.close()
    
        plt.rcParams['text.usetex'] = False
        fig = plt.figure(figsize=(4, 5))
        plt.plot(x, x ** 2, 'ko')
        plt.title('Page Three')
        pdf.savefig(fig)  # or you can pass a Figure object to pdf.savefig
        plt.close()
        
        # génération des graphes de mesures
        stationCourante = oSheet.getCellByPosition (0,1).String
        typeCourant =  oSheet.getCellByPosition (20,1).String
        uniteCourante = oSheet.getCellByPosition (19,1).String
        mesures = []
        dateprel = []
        for x in range(360):
            station = oSheet.getCellByPosition (0,x+1).String
            daterel =  convert_excel_time(oSheet.getCellByPosition (5,x+1).Value)
            mesure =  oSheet.getCellByPosition (17,x+1).Value
            typerel =  oSheet.getCellByPosition (20,x+1).String
            uniterel =  oSheet.getCellByPosition (19,x+1).String
            if station!=stationCourante or typerel!=typeCourant:
                plt.rcParams['text.usetex'] = False
                fig = plt.figure(figsize=(8, 6))
                plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m-%Y'))
                plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=1))
                plt.plot(dateprel,mesures,'ro')
                plt.title('station ' + stationCourante + ' == ' + typeCourant + ' (' + uniteCourante + ')')
                pdf.savefig(fig) 
                plt.close()
                stationCourante =  station
                typeCourant =  typerel 
                uniteCourante = uniterel
                mesures = []
                dateprel = []
            mesures.append(mesure)
            dateprel.append(daterel)


        # We can also set the file's metadata via the PdfPages object:
        d = pdf.infodict()
        d['Title'] = 'Multipage PDF'
        d['Author'] = 'Jurassic Pork'
        d['Subject'] = 'Création de graphes dans fichier PDF'
        d['Keywords'] = 'PdfPages multipage keywords author title subject'
        d['CreationDate'] = dt.datetime(2020, 10, 1)
        d['ModDate'] = dt.datetime.today()	
        
g_exportedScripts = matplot,
1 - Les 3 premiers graphes générés sont des graphes de test pour montrer les possibilités de matplotlib.
2 - Ensuite on génère les graphes de mesures ( un par couple station-type de mesure).
3 - Le principe est de balayer les lignes de données du classeur et de générer un graphe quand on change de couple station-type de mesure.

En pièces jointes :
Le fichier DEQUADO mis en forme contenant le script python matplot.
Le fichier pdf résultant.

Le script a été testé dans OpenOffice 4.1.7 (python 2.7.6) et LibreOffice 6.3 (python 3.5.9) sous windows 10.

Ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
SmPNRM
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 15 sept. 2020 12:05

Re: Graphiques "à la volée" à partir d'un format DEQUADO

Message par SmPNRM »

Bonjour à tous,

La dernière réponse de "Jurassic Pork" a l'air de constituer une très bonne base qu'il faut que je prenne le temps de creuser prochainement (quand j'en aurai !, mais ça devrait un peu se décanter dans un futur proche).
Je vous retiens au jus dès que je l'ai testée.

Merci à tous et à bientôt !
LibreOffice 6.4 sur Windows 10
SmPNRM
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 15 sept. 2020 12:05

Re: Graphiques "à la volée" à partir d'un format DEQUADO

Message par SmPNRM »

Bonjour à tous,

J'ai suivi la proposition de "Jurassic Pork" et ai pu installer "pip" puis charger le paquet "matplotlib".

Je bloque en revanche à l'exécution du script après avoir téléchargé DEQUADO_Python.ods

Voici le message d'erreur :

Code : Tout sélectionner

com.sun.star.uno.RuntimeException: Error during invoking function matplot in module vnd.sun.star.tdoc:/11/Scripts/python/ModuleMatPlot.py (<class 'FileNotFoundError'>: [Errno 2] No such file or directory: 'c:/temp/mesures_Dequado.pdf'
  File "C:\Program Files\LibreOffice\program\pythonscript.py", line 921, in invoke
    ret = self.func( *args )
  File "vnd.sun.star.tdoc:/11/Scripts/python/ModuleMatPlot.py", line 35, in matplot
  File "C:\Program Files\LibreOffice\program\python-core-3.7.7\lib\site-packages\matplotlib\backends\backend_pdf.py", line 2486, in __init__
    self._file = PdfFile(filename, metadata=metadata)
  File "C:\Program Files\LibreOffice\program\python-core-3.7.7\lib\site-packages\matplotlib\backends\backend_pdf.py", line 562, in __init__
    fh, opened = cbook.to_filehandle(filename, "wb", return_opened=True)
  File "C:\Program Files\LibreOffice\program\python-core-3.7.7\lib\site-packages\matplotlib\cbook\__init__.py", line 408, in to_filehandle
    fh = open(fname, flag, encoding=encoding)
)
J'ai essayé la chose suivante, pensant que ça pouvait provenir du répertoire de destination, mais qui ne marche pas :
- Copier le script dans l'éditeur en modifiant le répertoire de sortie du fichier pdf (c:/Documents plutôt que C:/temp), mais à l'exécution, j'obtiens :

Code : Tout sélectionner

Erreur de syntaxe BASIC.
Attendu : Sub.
J'en conclus que je ne dois pas être "au bon endroit" sachant que le script est en Python et qu'il attend "encore" du BASIC.

Du coup, j'ai cherché à éditer directement la macro, et si j'ai bien accès au script via l'outil d'exécution et de gestion (accessible dans la bibliothèque : DEQUADO_Python.ods > ModuleMatPlot > matplot), je n'y ai pas accès depuis l'outil d'édition (Pas de ModuleMatPlot, et donc de matplot).

Voilà un peu où j'en suis, donc si certains d'entre vous ont compris où je faisais fausse route, merci de vos propositions !

A bientôt !
LibreOffice 6.4 sur Windows 10
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 626
Inscription : 09 août 2017 22:15

Re: Graphiques "à la volée" à partir d'un format DEQUADO

Message par Jurassic Pork »

hello,
SmPNRM a écrit : J'ai essayé la chose suivante, pensant que ça pouvait provenir du répertoire de destination, mais qui ne marche pas :
Du coup, j'ai cherché à éditer directement la macro, et si j'ai bien accès au script via l'outil d'exécution et de gestion (accessible dans la bibliothèque : DEQUADO_Python.ods > ModuleMatPlot > matplot), je n'y ai pas accès depuis l'outil d'édition (Pas de ModuleMatPlot, et donc de matplot).
ce que tu appelles 'outil d'exécution et de gestion c'est bien l'extension APSO ? :
Apso.PNG
Si tu n'accèdes pas à l'éditeur c'est peut-être parce que tu ne l'as pas défini dans les options de APSO comme ceci par exemple :
APsoEditor.PNG
J'utilise Geany comme Editeur mais on peut utiliser NotePad++ aussi ou tout autre éditeur de texte. De préférence avec surlignage syntaxique.

Attention ! Pour éditer une macro python embarqué dans le fichier LibreOffice ou OpenOffice il faut faire comme ceci :
1 - Lancer l'édition de la macro par APSO
2 - Faire les modifications dans l'éditeur , enregistrer et fermer l'éditeur.
3 - Fermer la fenêtre APSO
4 - Enregistrer son fichier LibreOffice ou OpenOffice
5 - Fermer le fichier
Normalement ainsi la macro est bien mise à jour dans le fichier LibreOffice ou OpenOffice.


Ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
SmPNRM
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 15 sept. 2020 12:05

Re: Graphiques "à la volée" à partir d'un format DEQUADO

Message par SmPNRM »

Et bien non, j'avais zappé d'installer l'extension APSO.
Du coup, je l'ai fait mais j'ai quelques soucis avec et il va falloir que je règle ça d'abord.
En effet, l'extension s'affichait correctement au départ (:APSO: 1.2.6.2) dans le gestionnaire d'extensions et la fenêtre 'Scripts python - APSO v.1.2.6.2' se lançait automatiquement via Outils > Macros > Gérer les macros > Python.
Mais par la suite, cette extension s'affiche sous la forme apso.oxt dans le gestionnaire d'extensions, je ne parviens ni à la désinstaller ni à la réinstaller et
je n'ai plus accès à la fenêtre 'Scripts python - APSO v.1.2.6.2'.
Je reviens vers vous dès que j'arrive à me débloquer avec APSO.

A bientôt,
LibreOffice 6.4 sur Windows 10
SmPNRM
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 15 sept. 2020 12:05

Re: [Calc] Graphiques "à la volée" à partir d'un format DEQU

Message par SmPNRM »


La modération vous a écrit: Pas d'image ou de document hébergé en dehors du forum !
Utilisez pour cela notre service Ci-Joint (lien en bas de la page lors de la rédaction du message) : http://forum.openoffice.org/fr/forum/ft ... ne-PJ.html

Petit point d'avancement :

pip => OK
matplotlib => OK

[img]h**ps://i.postimg.cc/L5pns55G/IDC-Install-Pip-Matplotlib-Open-Office.png[/img]

APSO 1.2.6.2 correctement installée => OK
Notepad++ sélectionné dans les options d'APSO => OK

[img]h**ps://i.postimg.cc/h4T2ZYBG/APSO.png[/img]

Cependant, j'obtiens toujours le même message d'erreur évoqué précédemment (la modification du répertoire d'installation ne changeant rien) :

[img]h**ps://i.postimg.cc/pXczsV3t/Message-Erreur-Execution-Macro-Matplot.png[/img]

Sachant qu'il y a des lignes particulières ciblées, est-ce qu'il faut que je fasse des manips particulières sur le fichier pour que le script fonctionne ?
Ou y a t-il quelque chose qui vous interpelle dans les images illustrant les manips précédentes ?
En vous remerciant d'avance de vos bons conseils pour faire fonctionner ce script !

A bientôt,
LibreOffice 6.4 sur Windows 10
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 626
Inscription : 09 août 2017 22:15

Re: [Calc] Graphiques "à la volée" à partir d'un format DEQU

Message par Jurassic Pork »

hello,
le message est clair tu as un souci avec l'accès au fichier pdf à écrire :

Code : Tout sélectionner

 c:/Documents/mesures_Dequado.pdf
Le répertoire c:/Documents existe-t-il ? si oui as-tu les droits d'écriture dedans ?
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
SmPNRM
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 15 sept. 2020 12:05

[Resolu] Graphiques "à la volée" à partir d'un format DEQU

Message par SmPNRM »

Bonjour à tous,

Dans un premier temps, je vais republier correctement les images de mon message précédent :

L'installation de pip et matplotlib :
IDC_InstallPip&Matplotlib_OpenOffice.png
L'installation d'APSO et le choix de Notepad++ :
APSO.png
Le message d'erreur :
MessageErreurExecutionMacroMatplot.png
Et effectivement, j'avais bien un problème de répertoire de destination du fichier .pdf, car que ce soit le c:/temp ou le c:/Documents, aucun des deux n'existent sur mon poste.
Il suffisait donc dans le script de remplacer ce répertoire c:/temp par un répertoire effectif de mon poste (c:/Users/Wam/Documents), ce qui donne ceci :

Code : Tout sélectionner

# coding: utf-8
# Jurassic Pork Octobre 2020
from __future__ import unicode_literals
import uno
import datetime as dt
import numpy as np
import matplotlib
matplotlib.use('agg')
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

def floatHourToTime(fh):
    h, r = divmod(fh, 1)
    m, r = divmod(r*60, 1)
    return (
        int(h),
        int(m),
        int(r*60),
    )

def convert_excel_time(excel_time):
    mydt = dt.datetime.fromordinal(dt.datetime(1900, 1, 1).toordinal() + int(excel_time) - 2)
    hour, minute, second = floatHourToTime(excel_time % 1)
    mydt = mydt.replace(hour=hour, minute=minute, second=second)
    return mydt
    
def matplot():
    oDoc = XSCRIPTCONTEXT.getDocument()
    oSheet = oDoc.CurrentController.ActiveSheet

# Create the PdfPages object to which we will save the pages:
# The with statement makes sure that the PdfPages object is closed properly at
# the end of the block, even if an Exception occurs.
    with PdfPages('C:/Users/Wam/Documents/mesures_Dequado.pdf') as pdf:
        plt.figure(figsize=(3, 3))
        plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o')
        plt.title('Page One')
        pdf.savefig()  # saves the current figure into a pdf page
        plt.close()
    
        plt.rcParams['text.usetex'] = False
        plt.figure(figsize=(8, 6))
        x = np.arange(0, 5, 0.1)
        plt.plot(x, np.sin(x), 'b-')
        plt.title('Page Two')
        pdf.attach_note("plot of sin(x)")  # attach metadata (as pdf note) to page
        pdf.savefig()
        plt.close()
    
        plt.rcParams['text.usetex'] = False
        fig = plt.figure(figsize=(4, 5))
        plt.plot(x, x ** 2, 'ko')
        plt.title('Page Three')
        pdf.savefig(fig)  # or you can pass a Figure object to pdf.savefig
        plt.close()
        
        # génération des graphes de mesures
        stationCourante = oSheet.getCellByPosition (0,1).String
        typeCourant =  oSheet.getCellByPosition (20,1).String
        uniteCourante = oSheet.getCellByPosition (19,1).String
        mesures = []
        dateprel = []
        for x in range(360):
            station = oSheet.getCellByPosition (0,x+1).String
            daterel =  convert_excel_time(oSheet.getCellByPosition (5,x+1).Value)
            mesure =  oSheet.getCellByPosition (17,x+1).Value
            typerel =  oSheet.getCellByPosition (20,x+1).String
            uniterel =  oSheet.getCellByPosition (19,x+1).String
            if station!=stationCourante or typerel!=typeCourant:
                plt.rcParams['text.usetex'] = False
                fig = plt.figure(figsize=(8, 6))
                plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m-%Y'))
                plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=1))
                plt.plot(dateprel,mesures,'ro')
                plt.title('station ' + stationCourante + ' == ' + typeCourant + ' (' + uniteCourante + ')')
                pdf.savefig(fig) 
                plt.close()
                stationCourante =  station
                typeCourant =  typerel 
                uniteCourante = uniterel
                mesures = []
                dateprel = []
            mesures.append(mesure)
            dateprel.append(daterel)


        # We can also set the file's metadata via the PdfPages object:
        d = pdf.infodict()
        d['Title'] = 'Multipage PDF'
        d['Author'] = 'Jurassic Pork'
        d['Subject'] = 'Création de graphes dans fichier PDF'
        d['Keywords'] = 'PdfPages multipage keywords author title subject'
        d['CreationDate'] = dt.datetime(2020, 10, 1)
        d['ModDate'] = dt.datetime.today()	
        
g_exportedScripts = matplot,

Et du coup, le fichier .pdf s'est généré rapidement dans le répertoire indiqué.

Merci beaucoup pour ce script qui va constituer une excellente base de travail, et qui me motive à m'intéresser à la programmation sous Python (sous Calc mais aussi en géomatique).

A bientôt,
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.4 sur Windows 10