c# - 有没有办法从现有的 excel 文件创建现有字体的列表?
问题描述
如果现有的 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 的单元格,请参考 中创建的 CellFormat 的索引stylesheet.CellFormats
。沿着这条线的东西
stylesheet.CellFormats.Append(new CellFormat()
{
FontId = 1
});
var worksheetPart = doc.WorkbookPart.WorksheetParts.First();
var firstCell = worksheetPart.Worksheet.Descendants<Cell>().First();
firstCell.StyleIndex = 1;
推荐阅读
- c# - 缺少与 SQL Server 的连接
- asp.net-core - 将 asp.net mvc .net core 2.2.0 应用程序升级到 .net core 2.2.1 我缺少什么
- python-3.x - Dataframe中的值乘法
- reactjs - 未填充选定的下拉列表值
- react-native - 如何使视频适合 React Native 中的视图?
- android - SDK 目录不存在。GITLAB.COM CI
- javascript - 在 HTML 中按下按钮时图像无法显示
- javascript - 表单在 php 中提交 ajax 加载后无法保存检查的多个复选框值
- angularjs - 没有在 ace 编辑器中获得更新的光标位置?
- javascript - 没有执行箭头函数的jquery动画方法?