Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Exporter une DataTable vers Excel en lui appliquant des attributs de formatage

0000002948     -      12/10/2020

Ce code montre comment, avant de procéder à la conversion d'une DataTable vers un fichier Excel, procéder au formatage de la feuille Excel (couleurs, alignements, bordures, ...) Les propriétés utilisées ayant chacune un nom très explicite, il n'est pas nécessaire de les documenter davantage.

Zoom
DataSet ds = Api.Zselect(MercatorUi.Globals.RepData, "select s_id,s_modele,s_cle2,s_prix_ti from STOCK ...");
if (ds == null)
    return;

ds.Tables[0].Columns["s_modele"].Caption = "Désignation";
ds.Tables[0].Columns["s_cle2"].Caption = "Code-barres";

MercatorExporter.ExcelFormatters.Formatters formatters = new MercatorExporter.ExcelFormatters.Formatters();

formatters.Add(new MercatorExporter.ExcelFormatters.Formmatter(
    MercatorExporter.ExcelFormatters.CellsCollection.NewCellsCollectionRow(3),
    new MercatorExporter.ExcelFormatters.FormatterDescriptor { BackgroundColor = System.Drawing.Color.Yellow , FontItalic = true}
    ));

formatters.Add(new MercatorExporter.ExcelFormatters.Formmatter(
    MercatorExporter.ExcelFormatters.CellsCollection.NewCellsCollectionColumn(2),
    new MercatorExporter.ExcelFormatters.FormatterDescriptor { BackgroundColor = System.Drawing.Color.LightBlue, ColumnWidth = 120, HorizontalAlignment = MercatorExporter.ExcelFormatters.HorizontalAlignmentStyle.Right }
    ));

formatters.Add(new MercatorExporter.ExcelFormatters.Formmatter(
    MercatorExporter.ExcelFormatters.CellsCollection.NewCellsCollectionCell(1, 6),
    new MercatorExporter.ExcelFormatters.FormatterDescriptor { BackgroundColor = System.Drawing.Color.Orange, UnderlineStyle = MercatorExporter.ExcelFormatters.UnderlineStyle.Double }
    ));

formatters.Add(new MercatorExporter.ExcelFormatters.Formmatter(
    MercatorExporter.ExcelFormatters.CellsCollection.NewCellsCollectionCell(2, 6),
    new MercatorExporter.ExcelFormatters.FormatterDescriptor { BackgroundColor = System.Drawing.Color.Orange, UnderlineStyle = MercatorExporter.ExcelFormatters.UnderlineStyle.Single }
    ));

formatters.Add(new MercatorExporter.ExcelFormatters.Formmatter(
    MercatorExporter.ExcelFormatters.CellsCollection.NewCellsCollectionColumn(3),
    new MercatorExporter.ExcelFormatters.FormatterDescriptor { Borders = new MercatorExporter.ExcelFormatters.BordersDescriptor(MercatorExporter.ExcelFormatters.MultipleBorders.Left | MercatorExporter.ExcelFormatters.MultipleBorders.Right, System.Drawing.Color.Red, MercatorExporter.ExcelFormatters.LineStyle.Thick) }
    ));

formatters.Add(new MercatorExporter.ExcelFormatters.Formmatter(
    MercatorExporter.ExcelFormatters.CellsCollection.NewCellsCollectionRow(0),
    new MercatorExporter.ExcelFormatters.FormatterDescriptor { FontBold = true, RowHeight = 100, VerticalAlignment = MercatorExporter.ExcelFormatters.VerticalAlignmentStyle.Center }
    ));

formatters.Add(new MercatorExporter.ExcelFormatters.Formmatter(
    MercatorExporter.ExcelFormatters.CellsCollection.NewCellsCollectionColumn(1),
    new MercatorExporter.ExcelFormatters.FormatterDescriptor { ColumnAutoFit = true }
    ));

formatters.Add(new MercatorExporter.ExcelFormatters.Formmatter(
    MercatorExporter.ExcelFormatters.CellsCollection.NewCellsCollectionCell(1, 4),
    new MercatorExporter.ExcelFormatters.FormatterDescriptor { FontColor = System.Drawing.Color.Red }
    ));

formatters.Add(new MercatorExporter.ExcelFormatters.Formmatter(
    MercatorExporter.ExcelFormatters.CellsCollection.NewCellsCollectionColumn(3),
    new MercatorExporter.ExcelFormatters.FormatterDescriptor { NumberFormat = "### ### ### ##0.00", ColumnWidth = 75, HorizontalAlignment = MercatorExporter.ExcelFormatters.HorizontalAlignmentStyle.Right }
    ));

formatters.Add(new MercatorExporter.ExcelFormatters.Formmatter(
    MercatorExporter.ExcelFormatters.CellsCollection.NewCellsCollectionColumn(4),
    new MercatorExporter.ExcelFormatters.FormatterDescriptor { NumberFormat = "dd/MM/yyyy", ColumnWidth = 75, HorizontalAlignment = MercatorExporter.ExcelFormatters.HorizontalAlignmentStyle.Center }
    ));

ds.Tables[0].ExtendedProperties.Add("ExcelFormatters", formatters);

MercatorExporter.Exporter.Export(ds.Tables[0], MercatorExporter.ExporterFormats.Excel, @"c:\test\TestFormatters.xlsx");

 

Le résultat obtenu est le suivant :

Remarque : la première ligne contient toujours le nom des colonnes dans la DataTable (ou la propriété Caption). Dès lors, il y a un décalage de 1 entre les numéros de DataRows dans la DataTable et les numéros de lignes dans la feuille Excel.

N° ligne feuille Excel = n° DataRow dans la DataTable + 1