Convertir un sparkline en image et en HTML dans Aspose.Cells for Node.js via Java

Introduction

Les sparklines constituent un moyen compact de visualiser des tendances directement à l’intérieur d’une feuille de calcul. Alors que les utilisateurs d’Excel les voient en place, de nombreux scénarios réels nécessitent qu’un sparkline quitte la cellule — par exemple, pour être incorporé dans une autre cellule sous forme d’image statique, joint à un e-mail automatisé, ou rendu dans le cadre d’un rapport HTML publié sur le web.

Aspose.Cells prend en charge ces deux opérations. La méthode Sparkline.toImage génère un sparkline individuel vers un flux, et les octets résultants peuvent être affectés à Cell.EmbeddedImage afin que l’image soit stockée à l’intérieur d’une seule cellule du classeur. Par ailleurs, HtmlSaveOptions vous permet de convertir le classeur entier — sparklines inclus — en un fichier HTML autonome. Cet article présente ces deux workflows de bout en bout.

Workflow 1 — Générer des sparklines sous forme d’images et les incorporer dans des cellules

Dans ce workflow, vous allez construire une feuille de calcul qui contient une petite plage de valeurs sources, attacher trois groupes de sparklines différents (Ligne, Colonne et Empilé/Win-Loss) à cette plage, générer chaque groupe au format PNG, puis écrire ces octets PNG dans des cellules adjacentes en tant qu’images incorporées. Le résultat final est un fichier .xlsx unique qui contient à la fois les sparklines actifs et leurs équivalents en images rendues.

Instructions étape par étape

  1. Définissez un répertoire de travail et assurez-vous qu’il existe sur le disque.
  2. Créez un nouveau Workbook et obtenez une référence à la première Worksheet.
  3. Remplissez les cellules A1 à E1 avec cinq valeurs numériques d’exemple (par exemple, des ventes quotidiennes ou des relevés de température).
  4. Ajoutez trois objets SparklineGroup à la feuille de calcul en appelant worksheet.sparklineGroups.add(...) :
    • Un groupe SparklineType.Line ancré à F1, avec la plage de données A1:E1.
    • Un groupe SparklineType.Column ancré à G1, avec la plage de données A1:E1.
    • Un groupe SparklineType.Stacked (win/loss) ancré à H1, avec la plage de données A1:E1.
  5. Construisez une instance ImageOrPrintOptions et définissez sa propriété ImageType sur ImageType.Png afin que chaque sparkline soit rendu sous forme de PNG transparent.
  6. Pour chacun des trois groupes, générez son unique sparkline à l’aide de group.sparklines[0].toImage(outputStream, imageOptions), convertissez le ByteArrayOutputStream en byte[], et affectez le tableau à worksheet.cells.get("F2").setEmbeddedImage(...), worksheet.cells.get("G2").setEmbeddedImage(...), et worksheet.cells.get("H2").setEmbeddedImage(...) respectivement.
  7. Enregistrez le classeur sous output_with_sparklines.xlsx.
let workbook = new AsposeCells.Workbook();
let worksheet = workbook.getWorksheets().get(0);

// Remplir les données d'exemple dans les cellules A1:E1
worksheet.getCells().get("A1").putValue(5);
worksheet.getCells().get("B1").putValue(-3);
worksheet.getCells().get("C1").putValue(8);
worksheet.getCells().get("D1").putValue(-2);
worksheet.getCells().get("E1").putValue(6);

// Ajouter un groupe de sparklines en ligne ancré à F1 (colonne 5, ligne 0)
let lineArea = new AsposeCells.CellArea();
lineArea.setStartColumn(5);
lineArea.setEndColumn(5);
lineArea.setStartRow(0);
lineArea.setEndRow(0);
let lineIdx = worksheet.getSparklineGroups().add(AsposeCells.SparklineType.Line, "A1:E1", false, lineArea);

// Ajouter un groupe de sparklines en colonnes ancré à G1 (colonne 6, ligne 0)
let columnArea = new AsposeCells.CellArea();
columnArea.setStartColumn(6);
columnArea.setEndColumn(6);
columnArea.setStartRow(0);
columnArea.setEndRow(0);
let columnIdx = worksheet.getSparklineGroups().add(AsposeCells.SparklineType.Column, "A1:E1", false, columnArea);

// Ajouter un groupe de sparklines Win/Loss (empilées) ancré à H1 (colonne 7, ligne 0)
let stackedArea = new AsposeCells.CellArea();
stackedArea.setStartColumn(7);
stackedArea.setEndColumn(7);
stackedArea.setStartRow(0);
stackedArea.setEndRow(0);
let stackedIdx = worksheet.getSparklineGroups().add(AsposeCells.SparklineType.Stacked, "A1:E1", false, stackedArea);

// Configurer les options d'image pour la sortie PNG
let imageOptions = new AsposeCells.ImageOrPrintOptions();
imageOptions.setImageType(AsposeCells.ImageType.Png);

// Convertir la sparkline en ligne en image et l'incorporer dans la cellule F2
let lineSp = worksheet.getSparklineGroups().get(lineIdx).getSparklines().get(0);
let lineMs = new java.io.ByteArrayOutputStream();
lineSp.toImage(lineMs, imageOptions);
worksheet.getCells().get("F2").setEmbeddedImage(lineMs.toByteArray());

// Convertir la sparkline en colonnes en image et l'incorporer dans la cellule G2
let columnSp = worksheet.getSparklineGroups().get(columnIdx).getSparklines().get(0);
let columnMs = new java.io.ByteArrayOutputStream();
columnSp.toImage(columnMs, imageOptions);
worksheet.getCells().get("G2").setEmbeddedImage(columnMs.toByteArray());

// Convertir la sparkline Win/Loss en image et l'incorporer dans la cellule H2
let stackedSp = worksheet.getSparklineGroups().get(stackedIdx).getSparklines().get(0);
let stackedMs = new java.io.ByteArrayOutputStream();
stackedSp.toImage(stackedMs, imageOptions);
worksheet.getCells().get("H2").setEmbeddedImage(stackedMs.toByteArray());

// Enregistrer le classeur sur le disque
workbook.save("output_with_sparklines.xlsx");

Le code ci-dessus produit un classeur où chaque représentation visuelle d’un sparkline est dupliquée sous deux formes : le sparkline natif et actif ancré à la ligne 1, et une image PNG statique incorporée directement dans une cellule voisine de la ligne 2. Parce que les images vivent à l’intérieur du fichier lui-même, le classeur reste un artefact autonome unique qui peut être envoyé par e-mail ou archivé sans rompre les références aux images incorporées. Générez chaque groupe de sparklines au format PNG, convertissez le ByteArrayOutputStream en byte[], et affectez le tableau à la propriété setEmbeddedImage de la cellule cible — c’est cette affectation qui fait de l’image une partie du contenu stocké de la cellule.

Workflow 2 — Exporter la feuille de calcul avec sparklines au format HTML

Une fois que le classeur contient des sparklines actifs (et éventuellement leurs équivalents en images incorporées), la feuille de calcul entière peut être publiée sur le web en l’enregistrant au format HTML. La classe HtmlSaveOptions expose les réglages dont vous avez besoin pour contrôler cette exportation ; dans ce workflow, vous réutiliserez le fichier output_with_sparklines.xlsx produit par le Workflow 1 et le convertirez en un document HTML propre, d’une seule page.

Instructions étape par étape

  1. Assurez-vous que le fichier output_with_sparklines.xlsx produit par le Workflow 1 est disponible sur le disque dans votre répertoire de travail.
  2. Chargez ce fichier dans une nouvelle instance Workbook.
  3. Instanciez HtmlSaveOptions et définissez sa propriété ExportActiveWorksheetOnly sur true afin que le fichier HTML résultant contienne uniquement la feuille de calcul active plutôt que le classeur entier.
  4. Appelez workbook.save("sparklines.html", htmlOptions) pour écrire la sortie HTML sur le disque.
let workbook = new AsposeCells.Workbook("output_with_sparklines.xlsx");
let htmlOptions = new AsposeCells.HtmlSaveOptions();
htmlOptions.setExportActiveWorksheetOnly(true);
workbook.save("sparklines.html", htmlOptions);

Le code ci-dessus prend le classeur riche en sparklines du Workflow 1 et le transforme en un fichier HTML portable. Les sparklines sont conservés sous forme de rendus SVG ou PNG intégrés à l’intérieur du HTML généré, selon le mode d’exportation, de sorte que les utilisateurs finaux peuvent consulter les tendances dans n’importe quel navigateur moderne sans avoir besoin d’Excel installé. En définissant ExportActiveWorksheetOnly sur true, vous évitez de publier accidentellement des feuilles masquées ou des données auxiliaires — seule la feuille de calcul actuellement visible par l’utilisateur est exportée.

Résumé de l’API

Les workflows ci-dessus reposent sur un petit ensemble d’API Aspose.Cells travaillant ensemble.

  • SparklineGroup et l’accesseur de collection worksheet.sparklineGroups sont utilisés pour déclarer le type (Ligne, Colonne, Empilé), la plage de données et la cellule d’ancrage pour chaque groupe de sparklines. Dans cet article, chaque groupe est ancré à une seule cellule, donc le groupe est atteint via worksheet.sparklineGroups[i].
  • Sparkline et l’indexeur group.sparklines[0] renvoient le sparkline individuel à l’intérieur d’un groupe. Comme chaque groupe de l’exemple contient exactement un sparkline, aucune boucle forEach n’est requise.
  • Sparkline.toImage(OutputStream, ImageOrPrintOptions) est la méthode de rendu qui écrit une image du sparkline dans un OutputStream fourni. La méthode renvoie void ; vous lisez les octets à partir du flux après l’appel.
  • Cell.EmbeddedImage est une propriété byte[] qui stocke une image à l’intérieur d’une seule cellule. Elle est disponible dans Aspose.Cells 26.5 et versions ultérieures et constitue la méthode recommandée pour réinjecter un sparkline rendu par toImage dans le même classeur.
  • HtmlSaveOptions.ExportActiveWorksheetOnly (un boolean) restreint l’exportation HTML à la feuille de calcul active. C’est l’une des propriétés les plus couramment utilisées sur HtmlSaveOptions lors de la génération de rapports d’une seule page.
  • ImageOrPrintOptions.ImageType se trouve dans l’espace de noms com.aspose.cells.drawing et sélectionne le format d’image (par exemple, ImageType.Png) utilisé lors du rendu avec toImage et lors de l’impression de feuilles de calcul en images.

Articles connexes