gpt4 book ai didi

c# - 如何设置单元格的背景?

转载 作者:太空狗 更新时间:2023-10-29 18:32:09 24 4
gpt4 key购买 nike

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

阅读了几篇文章:

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

我还是做不到。

我的任务实际上乍一看似乎更容易一些,与那些文章中写的有点不同。上述教程主要展示了如何创建新文档并为其设置样式。虽然我需要更改现有样式的样式。

也就是说,我有一个现有的 xlsx 文档(报告模板)。我用必要的值填充报告(感谢 SO open xml excel read cell valueMSDN Working with sheets (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 .或者可能是指向更多连续教程的链接。

最佳答案

最后我改变主意使用单元格背景并使用字体。感谢 fosonSO Creating Excel document with 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();

关于c# - 如何设置单元格的背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14051642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com