Вопрос по excel, c#, openxml – Как установить фон ячеек?

8

Как установить фон нескольких ячеек в строке (или целой строке) в OpenXml?

Прочитав несколько статей:

Окрашивание ячеек в листе Excel с использованием openXML в C #Расширенный стиль в Excel Open XML

Я до сих пор не могу заставить его работать.

Моя задача на первый взгляд кажется несколько проще и немного отличается от того, что написано в этих статьях. Упомянутые учебные пособия преимущественно показывают, как создать новый документ и стилизовать его. Пока мне нужно поменять стилизацию на существующую.

То есть у меня есть существующийXLSX документ (шаблон отчета). Я заполняю отчет необходимыми значениями (удалось это сделать благодаряТАК открытое значение xml excel для чтения ячейки а такжеMSDN Работа с листами (Open XML SDK)). Но затем мне нужно отметить несколько строк, скажем, красным фоном.

Я не уверен, стоит ли использоватьCellStyle ни если бы я не использовалCellFormat или что-то еще ... Это то, что я получил до сих пор:

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

На самом деле я был бы очень признателен за более легкий и простой пример того, как оформить, скажем, клеткуA20 или в диапазоне отA20 вJ20, Или, возможно, ссылка на более последовательный учебник.

Ваш Ответ

1   ответ
8

ы. Благодаря ответуfoson вSO Создание документа Excel с OpenXml SDK 2.0 Мне удалось добавить новыйFont и новыйCellFormatсохранив первоначальную клеткуs форматирование (т.е. изменив только цвет шрифта):

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();
</cellvalues>
Вопрос касается фона ячейки, но код говорит только о цвете шрифта !! FLICKER

Похожие вопросы