Automatiser Office sans macro
Les macros VBA sont puissantes mais fragiles — elles ne fonctionnent pas sur Linux, déclenchent souvent des alertes de sécurité et sont difficiles à versionner. AutomationSequence V8 propose des actions natives openpyxl (Excel) et python-docx (Word) qui s'exécutent sans Office installé et produisent des fichiers natifs .xlsx et .docx.
Générer un rapport Excel ou Word depuis Python est plus reproductible qu'une macro VBA : le code est versionnable, testable, et tourne sur Windows, Linux et macOS sans dépendance Office.
Actions Excel — openpyxl
# Créer un fichier Excel depuis une séquence JSON
[
{
"type": "excel_create",
"output": "rapport_{{date_today}}.xlsx",
"sheets": [
{
"name": "Données",
"data_var": "query_result",
"headers": true,
"auto_width": true,
"freeze_row": 1,
"style": "table_blue"
}
],
"output_var": "excel_path"
}
]
Actions Excel disponibles :
excel_create— créer un nouveau classeur avec une ou plusieurs feuilles.excel_read— lire une feuille et stocker les données dans une variable.excel_write_sheet— écrire des données dans une feuille existante.excel_add_chart— ajouter un graphique (bar, line, pie, scatter).excel_apply_formula— insérer des formules Excel dans des cellules.excel_format_range— appliquer des styles, couleurs, bordures.
Formules et tableaux croisés
from automation_sequence.actions.excel import ExcelAction
import openpyxl
from openpyxl.chart import BarChart, Reference
class ExcelWithPivotPlugin(ExcelAction):
def execute(self, params, ctx):
wb = openpyxl.load_workbook(params['file'])
ws = wb.active
# Ajouter une ligne de totaux
last_row = ws.max_row + 2
ws.cell(last_row, 1, "TOTAL")
ws.cell(last_row, 3, f"=SUM(C2:C{ws.max_row})")
# Graphique bar depuis la colonne C
chart = BarChart()
data = Reference(ws, min_col=3, min_row=1, max_row=ws.max_row-2)
cats = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row-2)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws.add_chart(chart, "E5")
wb.save(params['file'])
Actions Word — python-docx
# Générer un document Word depuis un template
{
"type": "word_from_template",
"template": "templates/rapport_mensuel.docx",
"variables": {
"{{mois}}": "{{date_MMMM_YYYY}}",
"{{nb_sejours}}": "{{rsa_data|length}}",
"{{service}}": "Cardiologie"
},
"output": "rapports/rapport_{{date_YYYYMM}}.docx"
}
Templates dynamiques
Le système de templates Word fonctionne par remplacement de marqueurs dans le document source. Les marqueurs {{variable}} dans le texte, les tableaux et les en-têtes sont remplacés automatiquement :
from docx import Document
def fill_template(template_path: str, variables: dict, output_path: str):
doc = Document(template_path)
def replace_in_paragraphs(paragraphs):
for para in paragraphs:
for run in para.runs:
for key, val in variables.items():
if key in run.text:
run.text = run.text.replace(key, str(val))
replace_in_paragraphs(doc.paragraphs)
for table in doc.tables:
for row in table.rows:
replace_in_paragraphs(cell.paragraphs for cell in row.cells)
doc.save(output_path)
Fusion de documents
{
"type": "word_merge",
"files": [
"sections/couverture.docx",
"rapports/rapport_{{date_YYYYMM}}.docx",
"sections/annexes.docx"
],
"output": "livraison/rapport_complet_{{date_YYYYMM}}.docx",
"page_break_between": true
}
Séquence complète : rapport mensuel automatisé
[
// 1. Récupérer les données Oracle
{"type":"oracle_query", "query":"SELECT ...", "output_var":"data"},
// 2. Générer l'Excel avec graphique
{"type":"excel_create", "data_var":"data", "output":"data.xlsx"},
// 3. Générer le Word depuis template
{"type":"word_from_template", "template":"rapport.docx",
"variables":{"{{rows}}":"{{data|length}}"}, "output":"rapport_final.docx"},
// 4. Envoyer par email avec pièces jointes
{"type":"smtp_send", "attachments":["data.xlsx","rapport_final.docx"],
"to":"direction@entreprise.fr"}
]
Conclusion
Les actions openpyxl et python-docx d'AutomationSequence V8 permettent de générer des rapports Office complets depuis des données Oracle, CSV ou API — sans Office installé, sans macro VBA, et avec une traçabilité complète dans le journal HMAC. La combinaison template Word + données Oracle + envoi SMTP constitue un pipeline de reporting mensuel entièrement automatisé en moins de 20 lignes de JSON.