Vue d’ensemble

Les documents de type feuille de calcul sont des documents qui contiennent des données sous forme de tableau — sous forme de lignes et de colonnes. Ils sont également appelés carnets de travail. Il existe de nombreux formats de documents de feuille de calcul — Office Open XML (comme XLSX, XLSM, etc.), Microsoft Excel Binary File Format (XLS, XLT), format OpenDocument Spreadsheet (ODS, FODS, OTS), formats basés sur du texte délimité par des séparateurs (CSV, TSV etc.) et ainsi de suite. Tous forment ce que l’on appelle la famille des formats de feuilles de calcul. GroupDocs.Viewer prend en charge presque tous les formats de feuilles de calcul à l’importation et permet de les rendre (convertir) en HTML, PDF, PNG et JPEG. Cet article explique comment le faire, quelles options sont disponibles, ainsi que quand et pourquoi les utiliser.

Rendering a workbook, opened in MS Excel, to the HTML format

Utilisation de base

Tout d’abord, parlons des options. Il existe une classe distincte dans l’API publique : SpreadsheetOptions dans le namespace GroupDocs.Viewer.Options. Cette classe est spécialement conçue pour ajuster le rendu de la famille des formats de feuilles de calcul. Elle est accessible pour les quatre options de vue via la propriété SpreadsheetOptions :

Lorsqu’elle n’est pas spécifiée explicitement, la propriété SpreadsheetOptions possède une valeur implicite par défaut correspondant à une instance de la classe SpreadsheetOptions, qui sera détaillée plus loin dans cet article.

En un clin d’œil, le rendu d’un document de feuille de calcul avec GroupDocs.Viewer est très simple et similaire à tous les autres formats : créez une instance de ViewOptions, créez une instance de Viewer en indiquant le document de feuille de calcul d’entrée, puis appelez la méthode Viewer.View(viewOptions). L’exemple de code suivant montre le rendu d’un seul fichier de feuille de calcul d’entrée vers les 4 formats de sortie : HTML, PDF, PNG et JPEG. Notez qu’à part la création des instances des classes d’options, aucune adaptation spécifique aux feuilles de calcul n’est effectuée ; toutes les options de feuille de calcul conservent leurs valeurs par défaut.

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

HtmlViewOptions htmlOptions = HtmlViewOptions.ForEmbeddedResources("worksheet_{0}.html");
PdfViewOptions pdfOptions = new PdfViewOptions("Output_spreadsheet.pdf");
PngViewOptions pngOptions = new PngViewOptions("worksheet_{0}.png");
JpgViewOptions jpegOptions = new JpgViewOptions("worksheet_{0}.jpeg");

using (Viewer viewer = new Viewer("spreadsheet.xlsx"))
{
    viewer.View(htmlOptions);
    viewer.View(pdfOptions);
    viewer.View(pngOptions);
    viewer.View(jpegOptions);
}

Passons maintenant aux feuilles de calcul. Chaque feuille de calcul possède au moins une feuille de travail. Dans la plupart des logiciels de traitement de tableaux comme Microsoft Excel, les feuilles de travail sont représentées sous forme d’onglets. Certains formats de feuille de calcul ne contiennent qu’une seule feuille ; c’est le cas, par exemple, de tous les formats texte délimité par des séparateurs (CSV, TSV etc.).

Par défaut, GroupDocs.Viewer rend toutes les feuilles de travail du classeur fourni. Mais cela peut être modifié. La méthode Viewer.View() possède une surcharge qui accepte un tableau de numéros de pages en second paramètre : Int32[] pageNumbers. Lorsque ce paramètre est utilisé, seules les pages indiquées sont rendues. Ce paramètre est universel et s’applique à tous les formats pris en charge qui possèdent des pages, mais dans le contexte de la famille des formats de feuilles de calcul il désigne précisément les numéros de feuilles à afficher.

Veuillez noter que la numérotation des pages (et des feuilles) commence à 1, pas à 0.

L’exemple ci‑dessous montre comment rendre la 1ᵉʳᵉ et la 3ᵉ feuille de travail en PNG dans un classeur contenant 3 feuilles.

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

PngViewOptions pngOptions = new PngViewOptions("worksheet_{0}.png");
using (Viewer viewer = new Viewer("spreadsheet.xlsx"))
{
    viewer.View(pngOptions, 1, 3);
}

Découpage des feuilles de travail en pages

GroupDocs.Viewer rend les documents sous forme de pages, où l’on entend par page une zone rectangulaire de petite taille, comparable à la surface d’affichage ou à une feuille A4. En revanche, les feuilles de travail peuvent être très grandes. En particulier, le format désormais obsolète XLS supporte max 256 colonnes et 65 536 lignes, tandis que le format plus récent XLSX (Office Open XML Workbook) ainsi que Microsoft Excel supportent jusqu’à 16 384 colonnes et 1 048 576 lignes. « Faire tenir » les feuilles de travail sur des pages est une étape cruciale du rendu avec GroupDocs.Viewer. Pour adapter une feuille à une ou plusieurs pages, le produit effectue un découpage de la feuille : la feuille est divisée en plusieurs blocs rectangulaires, chacun étant placé sur une page distincte. Cinq méthodes différentes existent, listées et décrites ci‑après.

Ce qui est important : toutes ces méthodes de découpage sont spécifiées de la même façon — en appelant une méthode statique (méthode de fabrique) qui crée une instance de la classe SpreadsheetOptions.

Rendre toute la feuille sur une seule page

SpreadsheetOptions.ForOnePagePerSheet()

La façon la plus simple : désactiver le découpage et ajuster la taille de la page pour contenir l’ensemble du contenu de la feuille. C’est un bon choix lorsque l’on sait que la feuille est de petite taille. En revanche, si la feuille est très grande, cette approche peut produire des résultats désastreux. Par exemple, lors du rendu au format HTML, le document HTML résultant peut atteindre plusieurs dizaines voire centaines de MiB, ce qui complique son affichage dans les navigateurs. Lors du rendu au format JPEG, la largeur ou la hauteur peut dépasser la limite maximale de 65 535 pixels. Utilisez donc ce mode avec discernement.

Render worksheet on one page

Découper la feuille selon les sauts de page

SpreadsheetOptions.ForRenderingByPageBreaks()

Microsoft Excel insère automatiquement des sauts de page en fonction du format de papier et des paramètres de page (orientation, marges, etc.). En passant à l’onglet VueAperçu des sauts de page, on voit des lignes bleues qui divisent la feuille en blocs rectangulaires, chacun étant libellé « Page 1 », « Page 2 », etc. C’est ainsi qu’Excel « suggère » de découper la feuille.

Avec cette méthode, GroupDocs.Viewer suit Excel et découpe les feuilles selon les sauts de page, exactement comme le fait Excel.

Il convient de préciser que cette option — découper une feuille selon les sauts de page — est l’option par défaut de la propriété BaseViewOptions.SpreadsheetOptions. Ainsi, dès la création d’une instance de classe d’options de vue, l’option ForRenderingByPageBreaks() est sélectionnée.

Rendre uniquement la zone d’impression

SpreadsheetOptions.ForRenderingPrintArea()

En plus des sauts de page, Excel possède le concept de « Zone d’impression ». Il s’agit d’une ou plusieurs plages de cellules désignées pour l’impression ; tout le contenu en dehors de la zone d’impression n’est pas imprimé. Pour ajouter une plage à la zone d’impression, ouvrez l’onglet Mise en page, cliquez sur le bouton Zone d’impression, puis choisissez Définir la zone d’impression (voir capture d’écran). Pour ajouter une autre plage, sélectionnez‑la, cliquez à nouveau sur Zone d’impression et choisissez Ajouter à la zone d’impression. En mode Aperçu des sauts de page, toutes les plages de la zone d’impression sont visibles.

Render only print area

Rendre la zone d’impression et découper selon les sauts de page

SpreadsheetOptions.ForRenderingPrintAreaAndPageBreaks()

GroupDocs.Viewer propose une fonctionnalité unique : combiner la zone d’impression et les sauts de page dans un même mode. Le rendu tient compte simultanément de toutes les plages de la zone d’impression et des sauts de page afin de découper la feuille en pages.

Dans la capture d’écran suivante, la ligne rouge indique la zone d’impression, la ligne bleue les sauts de page.

Render print area and split by page breaks

Découper la feuille manuellement par lignes et colonnes

SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage)
SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage, int countColumnsPerPage)

Parfois aucune des méthodes précédentes n’est satisfaisante, ou le format de la feuille ne supporte ni les sauts de page ni les zones d’impression (par ex. le CSV). Dans ces cas, GroupDocs.Viewer permet de spécifier manuellement le nombre de lignes et/ou de colonnes à placer sur chaque page. En bref, la différence entre le découpage uniquement par lignes et le découpage par lignes + colonnes est illustrée sur la capture d’écran ci‑dessous.

Si la première surcharge de la méthode ForSplitSheetIntoPages est utilisée (un seul paramètre), le découpage se fait uniquement par lignes. Si la deuxième surcharge est utilisée (deux paramètres), le découpage se fait par lignes et colonnes.

Split worksheet into pages manually by rows and columns

Ajustement des options supplémentaires

Tout ce qui a été décrit jusqu’ici est essentiel et suffisant pour rendre des feuilles de calcul avec GroupDocs.Viewer. Cependant, de nombreuses options supplémentaires, bien que non obligatoires, permettent d’affiner davantage le résultat du rendu.

Certaines de ces options sont exposées sous forme de propriétés de la classe SpreadsheetOptions, accessible via la propriété SpreadsheetOptions des classes d’options de vue. D’autres se trouvent dans la classe abstraite ViewOptions, commune aux quatre modes de rendu.

Rendre les en‑têtes de lignes et de colonnes

Lorsque MS Excel ou un programme similaire ouvre un classeur, il affiche les en‑têtes de colonnes (A, B, C, AA, AB, …) et de lignes (1, 2, 3, …, 1 048 576). Par défaut, GroupDocs.Viewer ne les affiche pas, car elles font partie de l’interface du tableur et non du document lui‑même. Cette règle peut être modifiée via la propriété booléenne RenderHeadings. Elle est désactivée (false) par défaut ; lorsqu’elle est activée (true), les en‑têtes de lignes et de colonnes apparaissent dans le document de sortie, comme le montre la capture d’écran suivante.

Render row and column headings

Rendre les quadrillages de la feuille

Le principe est similaire au précédent. Par défaut, GroupDocs.Viewer ne montre pas les quadrillages entre les cellules, car ils ne font pas partie du fichier mais sont propres à l’affichage du tableur. En définissant la propriété booléenne RenderGridLines à true, les quadrillages sont reproduits, comme le montre la capture d’écran suivante.

Render worksheet gridlines

Contrôler le dépassement de texte dans les cellules

Il arrive fréquemment qu’un texte ne tienne pas dans les limites d’une cellule. Comment l’afficher correctement ? GroupDocs.Viewer propose la propriété spéciale SpreadsheetOptions.TextOverflowMode pour résoudre ce problème. Cette propriété possède le type énumération TextOverflowMode, qui comporte quatre valeurs décrites ci‑dessous.

OverlayIfNextIsEmpty

Par défaut, la propriété SpreadsheetOptions.TextOverflowMode a la valeur OverlayIfNextIsEmpty, qui reproduit le comportement par défaut d’Excel. Le texte déborde dans les cellules adjacentes uniquement si celles‑ci sont vides. Si les cellules adjacentes contiennent des données, le texte débordant est tronqué.

OverlayIfNextIsEmpty enum value

La capture d’écran montre le fichier HTML rendu à partir d’un XLSX avec la valeur OverlayIfNextIsEmpty. Notez la cellule B2 : le texte long est tronqué parce que la cellule C2 n’est pas vide. En revanche, le texte de C3 déborde sur D2 et E2, qui sont vides.

Overlay

La valeur TextOverflowMode.Overlay fonctionne de façon similaire, mais de manière plus agressive : le texte qui ne tient pas dans sa cellule déborde toujours, quel que soit le contenu des cellules adjacentes, qui seront alors écrasées.

Overlay enum value

Dans la capture d’écran, le texte long de la cellule B2 déborde sur C2, D2, E2, F2. Le texte original des cellules C2 et F2 est donc supprimé.

HideText

Le mode TextOverflowMode.HideText fait exactement le contraire du mode Overlay : le texte qui ne tient pas dans sa cellule est simplement tronqué, même s’il existe de l’espace libre dans les cellules adjacentes.

HideText enum value

Sur la capture d’écran, la cellule C3 montre ce comportement : malgré l’espace disponible dans D3, le texte est tronqué.

AutoFitColumn

La valeur TextOverflowMode.AutoFitColumn résout le problème en élargissant la colonne afin d’y faire tenir le texte. Ainsi, quelle que soit la longueur du texte dans une cellule, la largeur de la colonne contenant cette cellule est augmentée pour accueillir la chaîne complète.

AutoFitColumn enum value

La capture d’écran illustre ce fonctionnement. Cette approche peut toutefois rendre la page très large, entraînant un défilement horizontal gênant, surtout si le texte est très long.

Rendre les lignes et colonnes masquées

Microsoft Excel et d’autres tableurs permettent de masquer certaines lignes ou colonnes. Par défaut, GroupDocs.Viewer ne les rend pas, mais ce comportement est modifiable. Les propriétés ViewOptions.SpreadsheetOptions.RenderHiddenRows et ViewOptions.SpreadsheetOptions.RenderHiddenColumns, lorsqu’elles sont définies à true, affichent les lignes et colonnes masquées dans le fichier de sortie (HTML, PDF, PNG ou JPEG).

Rendre les feuilles masquées

De la même façon que les lignes et colonnes masquées, un classeur peut contenir une ou plusieurs feuilles masquées. Par défaut, GroupDocs.Viewer ne les rend pas. Cette règle peut être changée grâce à la propriété RenderHiddenPages en la réglant sur true. À noter que, contrairement aux propriétés précédentes, RenderHiddenPages se trouve dans la classe abstraite BaseViewOptions, commune à toutes les options de vue.

Ignorer les lignes et colonnes vides

Certaines feuilles sont « éparses » : elles contiennent de nombreuses cellules vides qui occupent inutilement de l’espace. GroupDocs.Viewer propose une option permettant d’ignorer ces lignes/colonnes vides lors du rendu. Si elle est activée, les lignes et/ou colonnes vides sont exclues du HTML, PDF, PNG ou JPEG générés. Les propriétés booléennes SpreadsheetOptions.SkipEmptyRows et SpreadsheetOptions.SkipEmptyColumns contrôlent cette fonctionnalité.

Skip empty rows and columns

La capture d’écran montre que les deux options SkipEmptyRows et SkipEmptyColumns sont activées.

Rendre ou masquer les commentaires de cellules

Les cellules d’un classeur peuvent contenir des commentaires. Par défaut, GroupDocs.Viewer les rend tous. Cette fonctionnalité peut être désactivée via la propriété BaseViewOptions.RemoveComments. En la réglant sur true, aucun commentaire n’est rendu. Cette propriété se trouve dans la classe BaseViewOptions, pas dans SpreadsheetOptions.

Render or hide cell comments

La capture d’écran montre le rendu d’un fichier XLSX contenant des commentaires de cellules au format PNG avec les options par défaut : le commentaire de la cellule E2 apparaît dans le PNG généré.

Définir les marges des feuilles dans les pages PDF de sortie

Lors du rendu de feuilles au format PDF, il est possible de contrôler les marges de page — la distance (en centimètres) entre le bord de la page et le contenu. Quatre propriétés permettent de régler les marges supérieure, droite, inférieure et gauche :

Par défaut, ces quatre propriétés ont des valeurs négatives, ce qui indique que les marges par défaut du GroupDocs.Viewer sont appliquées. Il est toutefois possible de les définir explicitement. Notez que les marges ne sont prises en compte que lorsque le format cible est le PDF.

L’extrait de code suivant montre la création d’un objet PdfViewOptions, la définition des quatre marges, puis le rendu du document :

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

PdfViewOptions pdfViewOptions = new PdfViewOptions("Output.pdf");
pdfViewOptions.SpreadsheetOptions = SpreadsheetOptions.ForOnePagePerSheet();
pdfViewOptions.SpreadsheetOptions.TopMargin = 2;
pdfViewOptions.SpreadsheetOptions.BottomMargin = 4;
pdfViewOptions.SpreadsheetOptions.LeftMargin = 8;
pdfViewOptions.SpreadsheetOptions.RightMargin = 0;

using (var viewer = new Viewer("spreadsheet.xlsx"))
{
    viewer.View(pdfViewOptions);
}

L’image suivante illustre le résultat :

Set worksheet margins in the output PDF pages

Conclusion

Les formats de feuilles de calcul sont complexes, et les documents peuvent contenir des contenus très variés en termes de type et de longueur. Dans de nombreux cas, il est impossible de rendre correctement un classeur complexe avec les options par défaut ; c’est pourquoi GroupDocs.Viewer propose un ensemble complet de propriétés permettant à chaque utilisateur d’ajuster le rendu selon ses besoins spécifiques.

Voir aussi

Obtenez un essai gratuit

Vous pouvez télécharger une version d’essai gratuite de GroupDocs.Viewer pour .NET depuis releases.groupdocs.com. Vous pouvez également obtenir une licence temporaire pour tester toutes les fonctionnalités sans restriction ici.