Insérer automatiquement des données Excel dans un fichier reStructuredText

Il est fréquent que les données d’entreprise se trouvent dispersées dans différents référentiels, bases de données, fichiers de traitement de texte ou feuilles de calcul.

Plutôt que de dupliquer l’information pour générer la documentation utilisateur, il est largement préférable de puiser à la source et de l’extraire directement des divers référentiels.

Supposons que nous disposions d’un fichier Excel contenant des noms de produits avec leurs versions :

Dianthus Geum Prunus

1.0

1.5

2.3

1.1

1.7

2.5

1.2

3.5

2.7

Le contenu ci-dessus est directement extrait d’un fichier Excel, mais nous souhaitons le présenter sous forme de sous-sections et de listes à puces.

Nous pouvons générer le fichier source de la documentation via le script Python suivant :

#!/usr/bin/python3
# coding: utf8
from openpyxl import load_workbook


def titre(title, ornament):
    print(title)
    for i in title:
        print(ornament, end='')
    print('\n')


def contenu(mincol, maxcol, minrow, maxrow):
    for row in ws.iter_rows(min_col=mincol, max_col=maxcol,
                            min_row=minrow, max_row=maxrow):
        for cell in row:
            print('- ' + cell.value)
    print()

# Charger le fichier Excel en lecture seule
wb = load_workbook(filename='produits.xlsx', read_only=True)
# Extraire le classeur actif
ws = wb.active

# Afficher le contenu ReST à l'écran
titre('Produits et versions', '=')

titre(ws['A1'].value, '-')
contenu(1, 1, 2, 4)

titre(ws['B1'].value, '-')
contenu(2, 2, 2, 4)

titre(ws['C1'].value, '-')
contenu(3, 3, 2, 4)

À l’exécution, le contenu suivant s’affiche :

Produits et versions
====================

Dianthus
--------

- 1.0
- 1.1
- 1.2

Geum
----

- 1.5
- 1.7
- 3.5

Prunus
------

- 2.3
- 2.5
- 2.7

Une fois compilé via Sphinx, ce code source produit un affichage HTML similaire à celui-ci :