IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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

Pour réagir au contenu de cet article, un espace de dialogue vous est proposé sur le forum. Commentez Donner une note à l´article (5)

Article lu   fois.

L'auteur

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 :

 
Sélectionnez
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 :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
let tableData = [];
let currentRow = [];
 
for (let i = 0; i < paragraphs.length; i++) {
    let level = paragraphs[i].GetNumbering().GetLevelIndex();
    let text = paragraphs[i].GetText().trim();
 
    if (level === 0) {
        if (currentRow.length > 0) {
            tableData.push(currentRow);
        }
        currentRow = [text];
    } else if (level === 1 && currentRow.length > 0) {
        currentRow.push(text);
    }
}
 
if (currentRow.length > 0) {
    tableData.push(currentRow);
}
  • 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 :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
let maxColumns = 0;
for (let j = 0; j < tableData.length; j++) {
    if (tableData[j].length > maxColumns) {
        maxColumns = tableData[j].length;
    }
}

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 :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
let table = Api.CreateTable(maxColumns, tableData.length);
oDocument.Push(table);
 
for (let row = 0; row < tableData.length; row++) {
    for (let col = 0; col < tableData[row].length; col++) {
        table
            .GetCell(row, col)
            .GetContent()
            .GetElement(0)
            .AddText(tableData[row][col]);
    }
}
  • 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 trycatch 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 :

 
Sélectionnez
1.
2.
3.
4.
5.
try {
    // Code execution
} catch (error) {
    console.log("Error: " + error.message);
}

II-F. Code complet de la macro

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
const oDocument = Api.GetDocument();
const paragraphs = oDocument.GetAllNumberedParagraphs();
let tableData = [];
let currentRow = [];
 
for (let i = 0; i < paragraphs.length; i++) {
    let level = paragraphs[i].GetNumbering().GetLevelIndex();
    let text = paragraphs[i].GetText().trim();
 
    if (level === 0) {
        if (currentRow.length > 0) {
            tableData.push(currentRow);
        }
        currentRow = [text];
    } else if (level === 1 && currentRow.length > 0) {
        currentRow.push(text);
    }
}
 
if (currentRow.length > 0) {
    tableData.push(currentRow);
}
let maxColumns = 0;
for (let j = 0; j < tableData.length; j++) {
    if (tableData[j].length > maxColumns) {
        maxColumns = tableData[j].length;
    }
}
let table = Api.CreateTable(maxColumns, tableData.length);
oDocument.Push(table);
 
for (let row = 0; row < tableData.length; row++) {
    for (let col = 0; col < tableData[row].length; col++) {
        table
            .GetCell(row, col)
            .GetContent()
            .GetElement(0)
            .AddText(tableData[row][col]);
    }
}
 
try {
    // Code execution
} catch (error) {
    console.log("Error: " + error.message);
}

III. Ressources utiles

IV. Remerciements Developpez.com

Nous tenons à remercier Malick pour la mise au gabarit.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2025 Daria Lapikhina . Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.