是否可以通过现有的excel文件创建现有字体的列表?

问题描述 投票:0回答:1

如果现有的excel工作表具有与名称和大小相关联的字体列表,是否可以在添加新字体/大小之前生成列表以查看字体和大小是否已经存在?

sample image

通过开放XML添加内容时,是否想查看字体(名称/大小)是否存在,还是只是将另一个fontID添加到列表中是正确的?

c# openxml
1个回答
0
投票

要获取文档中所有可用的字体,可以使用以下代码段

        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;
© www.soinside.com 2019 - 2024. All rights reserved.