如何在OpenXml中设置一行(或整行)中几个单元格的背景?
阅读了几篇文章:
我仍然无法使它工作.
我的任务实际上乍一看似乎有点容易,与这些文章中的内容略有不同.上述教程主要展示了如何创建新文档并对其进行样式化.虽然我需要改变现有的样式.
也就是说,我有一个现有的xlsx文档(报告模板).我使用必要的值填充报告(由于SO open 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();
Run Code Online (Sandbox Code Playgroud)
事实上,我将不胜感激,更加轻量和如何风格,比方说,细胞简单的例子A20或范围A20到J20.或者可能是一些连续教程的链接.
最后我改变主意使用单元格背景并使用了字体.感谢foson在SO创建Excel文档和OpenXml sdk 2.0中的回答,我设法添加了一个新的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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15775 次 |
| 最近记录: |