Génération automatique de documentation de backlog avec Google Sheets et Apps Script #
Dans un projet Agile, il est essentiel de documenter les User Stories (US) pour que toute l’équipe dispose d’une vision claire des besoins. Grâce à Google Sheets et Apps Script, il est possible d’automatiser cette génération de documentation.
Préparer le backlog dans Google Sheets #
Imaginons un fichier Backlog avec une structure simple :
Script principal code.gs #
Le script suivant automatise la récupération des US prêtes à la documentation et crée un Google Doc pour chaque US :
function main() {
const sheet = SpreadsheetApp.getActiveSpreadsheet();
const backlogName = tabs?.get('backlog') || 'Backlog';
const backlogSS = sheet.getSheetByName(backlogName);
if (!backlogSS) {
SpreadsheetApp.getUi().alert(`Feuille "${backlogName}" introuvable.`);
return;
}
const lastBacklogLine = backlogSS.getLastRow();
if (lastBacklogLine < 2) {
SpreadsheetApp.getUi().alert('Aucune donnée trouvée dans le backlog.');
return;
}
const rangeUS = backlogSS.getRange(2, 1, lastBacklogLine - 1, 7);
const USValues = rangeUS.getValues();
const usReady = USValues.filter(row => Boolean(row[0]));
if (usReady.length === 0) {
SpreadsheetApp.getUi().alert('Aucune US prête à être documentée.');
return;
}
const ui = SpreadsheetApp.getUi();
const dialogResponse = ui.alert(
`${usReady.length} US sont prêtes à être documentées. Voulez-vous continuer ?`,
ui.ButtonSet.OK_CANCEL
);
if (dialogResponse === ui.Button.OK) {
const doc = getDoc(usReady[0]);
usReady.forEach(us => generate(us));
doc.saveAndClose();
ui.alert('Documentation générée avec succès ✅');
}
}
Paramètres du projet (Para.gs) #
Pour simplifier la maintenance, on centralise les noms d’onglets :
const tabs = new Map([
['backlog', 'Backlog'],
['params', 'Params']
])
Génération des documents (GenerateDoc.gs) #
Le script crée un document par US et applique un style minimal :
const generate = (usRow) => {
console.log(`About to generate doc for ${usRow[1]}`)
// Ici, on pourrait parcourir chaque colonne pour enrichir le document
}
const getDoc = (usReady) => {
const title = `[US-${usReady[1]} - ${usReady[2]}]`;
const doc = DocumentApp.create(title);
const body = doc.getBody();
body.setMarginTop(72)
.setMarginBottom(72)
.setMarginLeft(72)
.setMarginRight(72);
const mainTitle = body.appendParagraph(title);
mainTitle.setHeading(DocumentApp.ParagraphHeading.TITLE);
mainTitle.setAlignment(DocumentApp.HorizontalAlignment.CENTER);
mainTitle.setAttributes({ [DocumentApp.Attribute.FONT_SIZE]: 20 });
body.appendParagraph('');
const description = body.appendParagraph(usReady[3] || 'Description non fournie');
description.setAttributes({
[DocumentApp.Attribute.FONT_SIZE]: 11,
[DocumentApp.Attribute.FONT_FAMILY]: 'Arial',
});
body.appendParagraph('');
const businessContext = body.appendParagraph('Business context');
businessContext.setHeading(DocumentApp.ParagraphHeading.HEADING2);
businessContext.setAttributes({ [DocumentApp.Attribute.FONT_SIZE]: 16 });
return doc;
}
Résultat #
Pour chaque US prête, un Google Doc est créé avec :
Le titre de l’US
La description
Le contexte métier
Le processus est rapide, fiable et centralisé. Plus besoin de copier-coller chaque US manuellement dans un document.