Search code examples
c#asp.net-mvc-5epplus

EPPlus: how can I assign border around each cell after I apply LoadFromCollection?


In my export ActionResult I was able to load the model into my ExcelPackage.

Where I am having trouble is assigning a border around each cell once LoadFromCollection is applied. While the AutoFitColumns correctly applies, the border style I applied only works on Cells["D1"], but not on the table.

BorderAround successfully places a border around the entire table, but I would rather apply to the border to the cells inside the table. Is there a way I can do that?

// 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(); 

Solution

  • If I know the amount of columns the model has, I can count the number of rows with a function and do this:

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

    Or, with more context. I verified that EPPlus will accept a string variable in Cells[], which allows me to select the entire table and apply my border styling and AutoFitColumns{}correctly. All I have to do manually is enter the starting column and ending column in the modelRange variable.

    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();