2015-06-22 17 views
17

Nella mia esportazione ActionResult sono riuscito a caricare il modello nel mio ExcelPackage.EPPlus: come posso assegnare un bordo attorno a ogni cella dopo aver applicato LoadFromCollection?

Dove si verificano problemi è l'assegnazione di un bordo attorno a ciascuna cella dopo l'applicazione di LoadFromCollection. Mentre lo AutoFitColumns si applica correttamente, lo stile del bordo applicato solo funziona su Cells["D1"], ma non sul tavolo.

BorderAround pone con successo un bordo intorno l'intera tabella, ma avrei preferito applicare al bordo alle celle all'interno tavolo. C'è un modo per farlo?

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

risposta

28

Se conosco la quantità di colonne Il modello è, posso contare il numero di righe con una funzione e fare questo:

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

Oppure, con più contesto. Ho verificato che EPPlus accetterà una variabile stringa in Celle [], che mi consente di selezionare l'intera tabella e applicare lo stile dei bordi e AutoFitColumns{} correttamente. Tutto quello che devo fare manualmente è inserire la colonna iniziale e la colonna finale nella variabile 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(); 
+0

Sembra funzionare, anche se non sembra che ci sia bisogno di 'var border =' poiché non viene mai utilizzato. – SharpC

+1

Mentre la variabile non è _direttamente_ utilizzata, la catena di segni uguali fa il lavoro di girare i bordi da tutti i lati. Per motivi di chiarezza, lo riscriverò in modo che sia più esplicito. –

+0

Certo, intendevo solo la parte 'var border =' essendo ridondante piuttosto che l'intera linea, ma ora sembra più chiara. – SharpC

Problemi correlati