web-dev-qa-db-fra.com

EPPlus: comment puis-je affecter une bordure autour de chaque cellule après avoir appliqué LoadFromCollection?

Dans mon ActionResult d'exportation, j'ai pu charger le modèle dans mon ExcelPackage.

Là où j'ai du mal, j'assigne une bordure autour de chaque cellule une fois que LoadFromCollection est appliqué. Bien que AutoFitColumns s'applique correctement, le style de bordure que j'ai appliqué ne fonctionne que sur Cells["D1"], mais pas sur la table.

BorderAround place avec succès une bordure autour de la table entière, mais je préfère appliquer la bordure aux cellules à l'intérieur la table. Y a-t-il un moyen de le faire?

// Fill worksheet with data to export
var modelCells = worksheet.Cells["D1"];
var border = modelCells.Style.Border.Top.Style = modelCells.Style.Border.Left.Style = modelCells.Style.Border.Right.Style = modelCells.Style.Border.Bottom.Style = ExcelBorderStyle.Medium;                    

modelCells
    .LoadFromCollection(Collection: exportQuery, PrintHeaders: true)
    .AutoFitColumns(); 
27
user4864716

Si je connais le nombre de colonnes du modèle, je peux compter le nombre de lignes avec une fonction et faire ceci:

var modelRows = exportQuery.Count()+1;    
string modelRange = "D1:F" + modelRows.ToString();
var modelTable = worksheet.Cells[modelRange];

Ou, avec plus de contexte. J'ai vérifié que EPPlus acceptera une variable de chaîne dans les cellules [], ce qui me permet de sélectionner la table entière et d'appliquer mon style de bordure et AutoFitColumns{}correctement. Tout ce que je dois faire manuellement est d'entrer la colonne de départ et la colonne de fin dans la variable modelRange.

var modelCells = worksheet.Cells["D1"];
var modelRows = exportQuery.Count()+1;    
string modelRange = "D1:F" + modelRows.ToString();
var modelTable = worksheet.Cells[modelRange];

// Assign borders
modelTable.Style.Border.Top.Style = ExcelBorderStyle.Thin;
modelTable.Style.Border.Left.Style = ExcelBorderStyle.Thin;
modelTable.Style.Border.Right.Style = ExcelBorderStyle.Thin;
modelTable.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;


// Fill worksheet with data to export
modelCells.LoadFromCollection(Collection: exportQuery, PrintHeaders: true);
modelTable.AutoFitColumns();
45
user4864716