Comment créer un tableau à partir d’une liste numérotée en utilisant la macro ONLYOFFICE

Daria Lapikhina

Pour réagir au contenu de cet article, un espace de dialogue vous est proposé sur le forum. Commentez

- Titre : Comment créer un tableau à partir d’une liste numérotée en utilisant la macro ONLYOFFICE

- Auteur : Daria Lapikhina

- Parution : 14 mars 2025

- Licence : Copyright ® 2025 Daria Lapikhina . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Construction de la macro

- II-A. Récupération du document et des paragraphes numérotés

- II-B. Organisation des éléments numérotés en lignes

- II-C. Détermination des dimensions du tableau

- II-D. Création et remplissage du tableau

- II-E. Traitement des erreurs

- II-F. Code complet de la macro

- III. Ressources utiles

- IV. Remerciements Developpez.com

I - Introduction

Lorsque du travail sur des documents, il est parfois nécessaire de convertir des listes numérotées en tableaux pour améliorer la lisibilité. L’exécution manuelle de cette tâche peut prendre beaucoup de temps. Les macros ONLYOFFICE permettent aux utilisateurs d’automatiser efficacement les tâches répétitives. Dans ce tutoriel, nous allons expliquer comment développer étape par étape une macro ONLYOFFICE qui transforme de manière transparente les listes numérotées en tableaux structurés.

II - Construction de la macro

II-A - Récupération du document et des paragraphes numérotés

La macro commence par accéder au document actif et récupère tous les paragraphes qui contiennent une numérotation :

const oDocument = Api.GetDocument();
const paragraphs = oDocument.GetAllNumberedParagraphs();

Dans ce code, les paramètres exécutent les actions suivantes :

- Api.GetDocument() récupère le document actuellement ouvert.

- oDocument.GetAllNumberedParagraphs() rassemble tous les paragraphes qui utilisent des styles de numérotation.

II-B - Organisation des éléments numérotés en lignes

Le script parcourt chaque paragraphe numéroté et les trie dans les lignes du tableau :

1. let tableData = [];

2. let currentRow = [];

4. for (let i = 0; i < paragraphs.length; i++) {

5. let level = paragraphs[i].GetNumbering().GetLevelIndex();

6. let text = paragraphs[i].GetText().trim();

8. if (level === 0) {

9. if (currentRow.length > 0) {

10. tableData.push(currentRow);

11. }

12. currentRow = [text];

13. } else if (level === 1 && currentRow.length > 0) {

14. currentRow.push(text);

15. }

16. }

18. if (currentRow.length > 0) {

19. tableData.push(currentRow);

20. }

- Le script parcourt en boucle tous les paragraphes et vérifie leur niveau de numérotation.

- Les éléments de niveau 0 commencent une nouvelle ligne, tandis que les éléments de niveau 1 sont ajoutés en tant que colonnes dans la ligne actuelle.

- Après traitement, toutes les lignes rassemblées sont stockées dans tableData.

II-C - Détermination des dimensions du tableau

Avant de créer le tableau, la macro détermine le nombre de colonnes nécessaires. Le script calcule maxColumns en trouvant la ligne la plus longue dans tableData. Cela permet de s’assurer que le tableau comporte suffisamment de colonnes pour accueillir correctement tous les éléments :

1. let maxColumns = 0;

2. for (let j = 0; j < tableData.length; j++) {

3. if (tableData[j].length > maxColumns) {

4. maxColumns = tableData[j].length;

5. }

6. }

II-D - Création et remplissage du tableau

Maintenant que les données sont organisées, la macro crée une table et y insère le contenu extrait :

1. let table = Api.CreateTable(maxColumns, tableData.length);

2. oDocument.Push(table);

4. for (let row = 0; row < tableData.length; row++) {

5. for (let col = 0; col < tableData[row].length; col++) {

6. table

7. .GetCell(row, col)

8. .GetContent()

9. .GetElement(0)

10. .AddText(tableData[row][col]);

11. }

12. }

- Api.CreateTable(maxColumns, tableData.length) crée un tableau aux dimensions requises.

- Le script parcourt en boucle tableData et insère le texte correspondant dans chaque cellule.

II-E - Traitement des erreurs

Pour garantir une exécution sans heurts, un bloc try…catch est utilisé pour détecter et enregistrer les erreurs. Si une erreur se produit, elle est enregistrée dans la console, ce qui aide les utilisateurs à résoudre les problèmes :

1. try {

2. // Code execution

3. } catch (error) {

4. console.log("Error: " + error.message);

5. }

II-F - Code complet de la macro

1. const oDocument = Api.GetDocument();

2. const paragraphs = oDocument.GetAllNumberedParagraphs();

3. let tableData = [];

4. let currentRow = [];

6. for (let i = 0; i < paragraphs.length; i++) {

7. let level = paragraphs[i].GetNumbering().GetLevelIndex();

8. let text = paragraphs[i].GetText().trim();

10. if (level === 0) {

11. if (currentRow.length > 0) {

12. tableData.push(currentRow);

13. }

14. currentRow = [text];

15. } else if (level === 1 && currentRow.length > 0) {

16. currentRow.push(text);

17. }

18. }

20. if (currentRow.length > 0) {

21. tableData.push(currentRow);

22. }

23. let maxColumns = 0;

24. for (let j = 0; j < tableData.length; j++) {

25. if (tableData[j].length > maxColumns) {

26. maxColumns = tableData[j].length;

27. }

28. }

29. let table = Api.CreateTable(maxColumns, tableData.length);

30. oDocument.Push(table);

32. for (let row = 0; row < tableData.length; row++) {

33. for (let col = 0; col < tableData[row].length; col++) {

34. table

35. .GetCell(row, col)

36. .GetContent()

37. .GetElement(0)

38. .AddText(tableData[row][col]);

39. }

40. }

42. try {

43. // Code execution

44. } catch (error) {

45. console.log("Error: " + error.message);

46. }

III - Ressources utiles

- Méthodes de l’API ONLYOFFICE

- ONLYOFFICE sur GitHub

- Tutoriels gratuits sur les macros ONLYOFFICE

- Comment intégrer DocSpace dans l’application à une page unique

- Comment intégrer une salle d’ONLYOFFICE DocSpace dans une application à page unique

- Code source de ONLYOFFICE DocSpace

- En savoir plus sur ONLYOFFICE DocSpace

- Les meilleurs cours et tutoriels pour apprendre ONLYOFFICE

IV - Remerciements Developpez.com

Nous tenons à remercier Malick pour la mise au gabarit.