En mi exportación ActionResult yo era capaz de cargar el modelo en mi ExcelPackage.

Donde tengo problemas es la asignación de un borde alrededor de cada celda una vez LoadFromCollection se aplica. Mientras que el AutoFitColumns se aplica correctamente, el estilo de borde que he aplicado sólo funciona en Cells["D1"], pero no en la mesa.

BorderAround correctamente coloca un borde alrededor de toda la mesa, pero prefiero que se aplican a la frontera a las células dentro de la tabla. Hay una manera que puedo hacer eso?

//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(); 
InformationsquelleAutor | 2015-06-22

1 Comentario

  1. 44

    Si sé la cantidad de columnas de la modelo tiene, me puede contar el número de filas con una función y hacer esto:

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

    O, con más contexto. He comprobado que EPPlus aceptará una variable de cadena en las Células[], que me permite seleccionar toda la tabla y aplicar mis fronteras estilo y AutoFitColumns{}correctamente. Todo lo que tengo que hacer manualmente es entrar en la columna de inicio y final de la columna en la 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();
    • Parece que funciona, aunque no parecen necesitar var border = como nunca utilizado.
    • Mientras que la variable no es directamente utilizado, la cadena de signos de igualdad de hacer la labor de convertir a las fronteras en todos los lados. En aras de la claridad, voy a volver a escribir esto para que sea más explícito.
    • Seguro, me refería sólo a la var border = parte de ser redundante, en lugar de toda la línea, pero parece más claro ahora.
    • Short-cut para un borde alrededor de un excelrange: modelTable.Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin);

Dejar respuesta

Please enter your comment!
Please enter your name here