如何检索单元格的颜色?
How can I retrieve the cell's color?
我想用epplus获取单元格颜色。在 Excel 单元格中,我有彩色文本。此代码不是 return 单元格颜色。我不明白为什么。我想获取单元格的所有颜色,然后将其添加到带有文本的 Dictionary
。
FileInfo file = new FileInfo("K:\1.xlsx");
var package = new ExcelPackage(file);
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
var start = worksheet.Dimension.Start;
var end = worksheet.Dimension.End;
for (int row = start.Row; row <= end.Row; row++)
{
for (int col = start.Column; col <= end.Column; col++)
{
var color = worksheet.Cells[row, col].Style.Font.Color;
}
}
.xlsx 文件中的文本有两种着色方式。
- 单元格可以应用样式(您在上面尝试使用的方法)
- 单元格可以包含 "Rich Text" 本身是彩色的内容
如果单元格包含多种颜色的文本,那么它是这些选项中的后者,因此我们必须使用 .RichText
属性 来访问颜色。我们还可以测试以确定单元格是否包含带有 .IsRichText
属性.
的富文本
以此工作簿为例:
然后当运行这个代码:
static void Main(string[] args)
{
Dictionary<string, Color> dictionaryTextToColour = new Dictionary<string, Color>();
var fInfo = new FileInfo(@"C:\Temp\sample.xlsx");
using (var package = new ExcelPackage(fInfo))
{
var a1 = package.Workbook.Worksheets.First().Cells[1, 1];
if (a1.IsRichText)
{
var richText = a1.RichText;
dictionaryTextToColour = richText
.ToDictionary(rt => rt.Text, rt => rt.Color); //NOT recommended to use a dictionary here
}
}
foreach (var substring in dictionaryTextToColour.Keys)
{
Console.WriteLine(substring + ": " + dictionaryTextToColour[substring]);
}
}
我们看到这个输出:
Some: Color [Empty]
TextW: Color [A=255, R=0, G=176, B=80]
ithVarious: Color [A=255, R=0, G=32, B=96]
Colour: Color [A=255, R=255, G=0, B=0]
s: Color [Empty]
ExcelRichTextCollection
类型的 .RichText
属性 实现 IEnumerable<ExcelRichText>
所以我们也可以用类似的东西迭代每个文本段:
foreach (var rtSubString in a1.RichText)
{
//do something with the string segment rtSubString
}
N.B。我已经将颜色添加到以文本为键的字典中,因为这是原始问题中要求的,但我认为这不是最好的数据结构,因为相同的子字符串可以用不同的颜色重复
我想用epplus获取单元格颜色。在 Excel 单元格中,我有彩色文本。此代码不是 return 单元格颜色。我不明白为什么。我想获取单元格的所有颜色,然后将其添加到带有文本的 Dictionary
。
FileInfo file = new FileInfo("K:\1.xlsx");
var package = new ExcelPackage(file);
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
var start = worksheet.Dimension.Start;
var end = worksheet.Dimension.End;
for (int row = start.Row; row <= end.Row; row++)
{
for (int col = start.Column; col <= end.Column; col++)
{
var color = worksheet.Cells[row, col].Style.Font.Color;
}
}
.xlsx 文件中的文本有两种着色方式。
- 单元格可以应用样式(您在上面尝试使用的方法)
- 单元格可以包含 "Rich Text" 本身是彩色的内容
如果单元格包含多种颜色的文本,那么它是这些选项中的后者,因此我们必须使用 .RichText
属性 来访问颜色。我们还可以测试以确定单元格是否包含带有 .IsRichText
属性.
以此工作簿为例:
然后当运行这个代码:
static void Main(string[] args)
{
Dictionary<string, Color> dictionaryTextToColour = new Dictionary<string, Color>();
var fInfo = new FileInfo(@"C:\Temp\sample.xlsx");
using (var package = new ExcelPackage(fInfo))
{
var a1 = package.Workbook.Worksheets.First().Cells[1, 1];
if (a1.IsRichText)
{
var richText = a1.RichText;
dictionaryTextToColour = richText
.ToDictionary(rt => rt.Text, rt => rt.Color); //NOT recommended to use a dictionary here
}
}
foreach (var substring in dictionaryTextToColour.Keys)
{
Console.WriteLine(substring + ": " + dictionaryTextToColour[substring]);
}
}
我们看到这个输出:
Some: Color [Empty] TextW: Color [A=255, R=0, G=176, B=80] ithVarious: Color [A=255, R=0, G=32, B=96] Colour: Color [A=255, R=255, G=0, B=0] s: Color [Empty]
ExcelRichTextCollection
类型的 .RichText
属性 实现 IEnumerable<ExcelRichText>
所以我们也可以用类似的东西迭代每个文本段:
foreach (var rtSubString in a1.RichText)
{
//do something with the string segment rtSubString
}
N.B。我已经将颜色添加到以文本为键的字典中,因为这是原始问题中要求的,但我认为这不是最好的数据结构,因为相同的子字符串可以用不同的颜色重复