如果现有的excel工作表具有与名称和大小相关联的字体列表,是否可以在添加新字体/大小之前生成列表以查看字体和大小是否已经存在?
通过开放XML添加内容时,是否想查看字体(名称/大小)是否存在,还是只是将另一个fontID
添加到列表中是正确的?
要获取文档中所有可用的字体,可以使用以下代码段
var doc = SpreadsheetDocument.Open(@"test.xlsx", true);
var styles = doc.WorkbookPart.WorkbookStylesPart;
var stylesheet = styles.Stylesheet;
var availableFonts = stylesheet.Fonts.Cast<Font>();
foreach (var font in availableFonts)
{
Console.WriteLine($"Font name: {font.FontName.Val}, font size: {font.FontSize.Val}");
}
如果您要检查是否存在并添加不存在的内容,可以使用以下代码
if (!availableFonts.Any(font => font.FontSize.Val == 20 && font.FontName.Val == "Comic Sans MS"))
{
var font = new Font();
font.Append(new FontSize(){ Val = 20 });
font.Append(new FontName(){ Val = "Comic Sans MS"});
stylesheet.Fonts.Append(font);
}
旁注:要将这种字体应用于单元格,您需要创建CellFormat(stylesheet.CellFormats
)并填充FontId。您可以使用stylesheet.Fonts
中的索引来引用字体。要将CellFormat应用于需要设置StyleIndex的单元格,请在stylesheet.CellFormats
中引用创建的CellFormat的索引。这条线的东西
stylesheet.CellFormats.Append(new CellFormat()
{
FontId = 1
});
var worksheetPart = doc.WorkbookPart.WorksheetParts.First();
var firstCell = worksheetPart.Worksheet.Descendants<Cell>().First();
firstCell.StyleIndex = 1;