2017-10-06 2 views
0

Ich muss eine Liste von Objekten in Excel-Tabelle als Tabelle schreiben, in der jede Spalte Objektattribute oder Werte darstellt. Für die folgende Methode, die Spaltennamen in einer separaten Liste und Datenobjekte in einer Liste übergibt, konnte ich die Daten wie unten angezeigt bekommen, aber trotzdem konnte ich die Spalten nicht richtig anzeigen lassen.Schreiben eines Excel mit geschlossenem XML - Hinzufügen von benutzerdefinierten Spaltennamen

Ich habe die folgende Dokumentation verwiesen, aber ich konnte keinen Weg finden, um die Titel richtig anzuzeigen. https://github.com/closedxml/closedxml/wiki/Inserting-Tables

-Code

public string CreateExcelFile<T>(IEnumerable<T> list, string sheetName, string headerTitle, List<string> titles, string fileName, string savedPath) 
{ 
    var wb = new XLWorkbook(); 
    var ws = wb.Worksheets.Add(sheetName); 

    ws.Cell(1, 1).Value = headerTitle;     // sets excel sheet header 

    var rangeTitle = ws.Range(3, 1, 3, titles.Count); // range for row 3, column 1 to row 3, column titles.Count 
    rangeTitle.AddToNamed("Titles"); 

    // Need to add columns names with in rangeTitle 
    //rangeTitle.InsertData(titles); 

    // write data from row 4 onwards 
    if (list != null && list.Any()) 
    { 
     ws.Cell(4, 1).InsertData(list);     
    } 
    else 
    { 
     ws.Cell(4, 1).Value = "No data to show"; 
    } 

    // styles 
    var titlesStyle = wb.Style; 
    titlesStyle.Font.Bold = true; 
    titlesStyle.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; 
    titlesStyle.Fill.BackgroundColor = XLColor.Amber; 

    // style titles row 
    wb.NamedRanges.NamedRange("Titles").Ranges.Style = titlesStyle; 

    ws.Columns().AdjustToContents(); 
    var filePath = savedPath + string.Format("{0}.xlsx", fileName); 
    wb.SaveAs(filePath); 

    return filePath; 
} 

Output excel

enter image description here

Output Im Versuch zu bekommen - ich brauche Werte in Titel im Gelben Reihe hervorgehoben gespeichert zu bekommen. enter image description here

Kann jemand helfen?

Antwort

0

Ich schaffte es, die Spalten anzuzeigen, indem Sie unten tun.

// Need to add columns names with in rangeTitle 
for (int i = 0; i < titles.Count; i++) 
{ 
    var columnNumber = i + 1; 
    ws.Cell(3, columnNumber).Value = titles[i]; 
} 

Dies funktioniert für jetzt. Aber ich frage mich, gibt es einen besseren Weg, Dinge zu tun (ohne Spaltennamen wie oben manuell zuweisen).

Verwandte Themen