2012-12-27 12 views
6

Jak ustawić tło kilku komórek w wierszu (lub całego wiersza) w OpenXML?Jak ustawić tło komórek?

Po przeczytaniu kilku artykułów:

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

Wciąż nie mogę tego dokonać.

Moje zadanie na pierwszy rzut oka wydaje się nieco łatwiejsze i trochę inne od tego, co jest napisane w tych artykułach. Wspomniane tutoriale głównie pokazują, jak utworzyć nowy dokument i nadać mu styl. Chociaż muszę zmienić stylizację istniejącego.

Oznacza to, że mam istniejący dokument xlsx (szablon raportu). Wypełniam raport niezbędnymi wartościami (udało mi się to zrobić dzięki SO open xml excel read cell value i MSDN Working with sheets (Open XML SDK)). Ale potem muszę zaznaczyć kilka rzędów na, powiedzmy, czerwonym tle.

jestem pewien, czy nie używać CellStyle ani czy powinno się używać CellFormat lub coś innego ... To jest to, co mam do tej pory:

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

Właściwie chciałbym wdzięczni bardziej światło- waga i łatwy przykład stylu, powiedzmy, komórka A20 lub zakres od A20 do J20. Lub prawdopodobnie link do kilku kolejnych samouczków.

Odpowiedz

5

W końcu zmieniłem zdanie, aby używać tła komórki i używanych czcionek. Dzięki odpowiedzieć przez foson w SO Creating Excel document with OpenXml sdk 2.0 udało mi się dodać nowy Font i nowy CellFormat, że zachowane formatowanie oryginalnego komórki (tj zmieniwszy tylko kolor czcionki):

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(); 
Powiązane problemy