2012-12-27 29 views
6

Wie den Hintergrund mehrerer Zellen in einer Zeile (oder einer ganzen Zeile) in OpenXml festlegen?Wie setzt man den Hintergrund der Zellen?

mehrere Artikel gelesen hatte:

  1. Coloring cells in excel sheet using openXML in C#
  2. Advanced styling in Excel Open XML

Ich kann es immer noch nicht funktioniert.

Meine Aufgabe scheint auf den ersten Blick etwas einfacher zu sein und ein wenig anders als das, was in diesen Artikeln geschrieben wird. Die erwähnten Tutorials zeigen hauptsächlich, wie man ein neues Dokument erstellt und es formatiert. Während ich das Styling des bestehenden ändern muss.

Das heißt, ich habe eine bestehende xlsx Dokument (eine Berichtsvorlage). Ich befülle den Bericht mit den notwendigen Werten (geschafft, es dank SO open xml excel read cell value und MSDN Working with sheets (Open XML SDK) zu tun). Aber als nächstes muss ich mehrere Zeilen mit, sagen wir, rotem Hintergrund markieren.

Ich bin weder sicher, ob CellStyle zu verwenden, noch wenn ich CellFormat oder etwas anderes verwenden soll ... Das ist, was ich jetzt stand auf:

SpreadsheetDocument doc = SpreadsheetDocument.Open("ole.xlsx", true); 

Sheet sheet = (Sheet)doc.WorkbookPart 
         .Workbook 
         .Sheets 
         .FirstOrDefault(); 

WorksheetPart worksheetPart = (WorksheetPart)doc.WorkbookPart 
               .GetPartById(sheet.Id); 
Worksheet worksheet = worksheetPart.Worksheet; 


CellStyle cs = new CellStyle(); 
cs.Name = StringValue.FromString("Normal"); 
cs.FormatId = 0; 
cs.BuiltinId = 0; 
//where are the style values? 

WorkbookStylesPart wbsp = doc.WorkbookPart 
           .GetPartsOfType<WorkbookStylesPart>() 
           .FirstOrDefault(); 
wbsp.Stylesheet.CellStyles.Append(cs); 
wbsp.Stylesheet.Save(); 



Cell cell = GetCell(worksheet, "A", 20); 
cell.StyleIndex = 1U;//get the new cellstyle index somehow 

doc.Close(); 

Eigentlich würde ich stark ein Licht schätzen Gewicht und einfaches Beispiel, wie man, zum Beispiel, Zelle A20 oder Bereich von A20 zu J20 style. Oder wahrscheinlich ein Link zu einem mehr aufeinander folgenden Tutorial.

Antwort

5

Am Ende änderte ich meine Meinung zu Zellhintergrund und verwendeten Schriftarten zu verwenden. Dank Antwort von foson in SO Creating Excel document with OpenXml sdk 2.0 ich ein neues Font und ein neues CellFormat hinzuzufügen verwaltet werden, die ursprüngliche Zelle Formatierung erhalten haben (das heißt die Schriftfarbe geändert hat nur):

SpreadsheetDocument doc = SpreadsheetDocument.Open("1.xlsx", true); 
Sheet sheet = (Sheet)doc.WorkbookPart.Workbook.Sheets.FirstOrDefault(); 
WorksheetPart worksheetPart = (WorksheetPart)doc.WorkbookPart 
               .GetPartById(sheet.Id); 
Worksheet worksheet = worksheetPart.Worksheet; 

WorkbookStylesPart styles = doc.WorkbookPart.WorkbookStylesPart; 
Stylesheet stylesheet = styles.Stylesheet; 
CellFormats cellformats = stylesheet.CellFormats; 
Fonts fonts = stylesheet.Fonts; 

UInt32 fontIndex = fonts.Count; 
UInt32 formatIndex = cellformats.Count; 

Cell cell = GetCell(worksheet, "A", 19); 
cell.CellValue = new CellValue(DateTime.Now.ToLongTimeString()); 
cell.DataType = new EnumValue<CellValues>(CellValues.String); 

CellFormat f = (CellFormat)cellformats.ElementAt((int)cell.StyleIndex.Value); 

var font = (Font)fonts.ElementAt((int)f.FontId.Value); 
var newfont = (Font)font.Clone(); 
newfont.Color = new Color() { Rgb = new HexBinaryValue("ff0000") }; 
fonts.Append(newfont); 

CellFormat newformat = (CellFormat)f.Clone(); 
newformat.FontId = fontIndex; 
cellformats.Append(newformat); 

stylesheet.Save(); 

cell.StyleIndex = formatIndex; 
doc.Close(); 
Verwandte Themen