如何设置单元格的背景?

如何在OpenXml中设置一行(或整行)中的几个单元格的背景?

阅读了几篇文章:

  1. 使用C#中的openXML在Excel表格中着色单元格
  2. Excel Open XML中的高级样式

我仍然无法工作。

我的任务实际上乍一看似乎比这些文章中写的稍微简单一些,有点不同。 所提到的教程主要展示如何创build一个新的文档和样式。 而我需要改变现有的造型。

也就是说,我有一个现有的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<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(); 

事实上,我会非常感谢一个更轻量级的简单的例子,例如,如何细胞A20或范围从A20J20 。 或者可能是一些更连续教程的链接。

最后,我改变了主意,使用单元格背景和使用字体。 在SO创buildExcel文档使用OpenXml sdk 2.0创buildExcel文档时,我设法添加了一个新的Font和一个新的CellFormat ,保留了原始单元格的格式(即仅更改了字体颜色):

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