簡體   English   中英

如何獲取單元格的顏色?

[英]How can I retrieve the cell's color?

我想使用epplus獲得單元格顏色。 在Excel單元格中,我給文本加上了彩色。 此代碼不返回單元格顏色。 我不明白為什么。 我想獲取單元格的所有顏色,然后將其添加到帶有文本的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屬性的.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
}

注意:我已將顏色添加到以文本為鍵的字典中,因為這是原始問題所要求的,但是我認為這不是最佳的數據結構,因為相同的子字符串可以用不同的顏色重復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM