c# - 如何在 WPF C# 中使用 EPPlus 从 Excel 中正确导入字体颜色?
问题描述
背景
我正在构建一个简单的应用程序,它从 Excel 中的某些单元格读取文本并在 WPF-xaml 文本块中显示内容。
纯文本工作正常;除了字体颜色外,富文本工作正常。
有些颜色根本不会转移。我认为这与哪种颜色、标准或非标准有关,但情况似乎并非如此。
另一个可能相关的谜团是,有时颜色只有在带有富文本的情况下才能正确导入。
代码讨论
我使用嵌套的 for 循环逐个访问每个单元格,当到达一个空单元格时终止。对于每个单元格,我分别访问富文本数据并创建一个新运行,根据富文本数据(使用 if 语句)为运行分配属性。
代码
private void ReadExcelData()
{
ExcelRange cell;
for (int row = 2; row < 27000; row++)
{
if (string.IsNullOrWhiteSpace(worksheet.Cells[row, 2].Value?.ToString())) { break; }
Card card = new Card();
card.codeCore = this;
for (int col = 2; col < 5; col++)
{
cell = worksheet.Cells[row, col];
foreach (OfficeOpenXml.Style.ExcelRichText part in cell.RichText)
{
Run textRun = new Run();
GetDataFromCell(part, textRun, cell);
switch (col)
{
case 2: card.firstTextPanel.Add(textRun); break;
case 3: card.secondTextPanel.Add(textRun); break;
case 4: card.thirdTextPanel.Add(textRun); break;
default:
break;
}
}
}
cards.Add(card);
}
}
private void GetDataFromCell(OfficeOpenXml.Style.ExcelRichText part_a, Run textRun, ExcelRange cell_a)
{
if (cell_a.Style.Font.Bold) { textRun.FontWeight = FontWeights.Bold; }
else if (part_a.Bold) { textRun.FontWeight = FontWeights.Bold; }
if (cell_a.Style.Font.Italic) { textRun.FontStyle = FontStyles.Italic; }
else if (part_a.Italic) { textRun.FontStyle = FontStyles.Italic; }
if (cell_a.Style.Font.UnderLine) { textRun.TextDecorations = TextDecorations.Underline; }
else if (part_a.UnderLine) { textRun.TextDecorations = TextDecorations.Underline; }
textRun.Text = part_a.Text;
textRun.Foreground = new SolidColorBrush(Color.FromRgb(part_a.Color.R, part_a.Color.G, part_a.Color.B));
}
Excel
结果
问题
为什么会发生这种情况,我能做些什么来解决它?
解决方案
推荐阅读
- excel - 如何将工作簿设置为变量名?
- java - 使用完全自定义的多个规则对字符串列表进行排序
- pagespeed - 为什么即使在图像上添加延迟加载后 Google PageSpeed Insight 仍会在机会中显示一些图像
- javascript - ChartJS Javascript - 如何绘制堆积条形直方图但数据集大小未知
- android - React-native 一致的方式来制作动画视图以获得全高
- python - 我应该在 requirements.txt 中添加什么来从 github 安装这个库?
- python - FPDF __init__ 结合 Python 中的页眉和页脚
- mysql - 将 MySQL 表从一台服务器导入另一台服务器
- php - 将外键添加到 Laravel 中的现有表时,外键约束失败
- java - 一旦服务器启动,Apache Camel 会加载所有路由吗?