2015-06-22 14 views
17

W moim eksporcie ActionResult udało mi się załadować model do mojego pakietu ExcelPackage.EPPlus: jak mogę przypisać obramowanie do każdej komórki po zastosowaniu LoadFromCollection?

Tam, gdzie mam problem, przypisuję obramowanie wokół każdej komórki po zastosowaniu LoadFromCollection. Chociaż poprawne zastosowanie ma AutoFitColumns, zastosowany styl krawędzi działa tylko na Cells["D1"], ale nie na stole.

BorderAround z powodzeniem stawia obramowanie wokół całej tabeli, ale wolałbym mieć zastosowanie do granicy z komórkami wewnątrz tabeli. Czy mogę to zrobić?

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

Odpowiedz

28

Jeśli wiem ilość kolumn model ma, mogę policzyć liczbę wierszy z funkcją i to zrobić:

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

Albo, bardziej kontekstu. Potwierdziłem, że EPPlus zaakceptuje zmienną łańcuchową w komórkach [], która pozwala mi wybrać całą tabelę i poprawnie zastosować moją stylistykę graniczną i AutoFitColumns{}. Wszystko, co muszę zrobić ręcznie, to wpisać kolumnę początkową i końcową w zmiennej 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

Wydaje się działać, chociaż nie wydaje się, że potrzebujesz 'var border =', ponieważ nigdy nie jest używany. – SharpC

+1

Podczas gdy zmienna nie jest używana bezpośrednio, łańcuch równych znaków wykonuje pracę obracania granic ze wszystkich stron. Dla jasności przepisuję to ponownie, aby było bardziej jednoznaczne. –

+0

Oczywiście, miałem na myśli tylko część 'var border =', która jest zbędna, a nie cała linia, ale teraz wygląda teraz jaśniej. – SharpC