簡體   English   中英

C#Interop從給定范圍獲取Excel單元格背景

[英]C# Interop get Excel cells background from given range

如何從指定的單元格范圍中獲取背景顏色列表?

這是我找到的唯一解決方案,但是它從單個單元格返回背景色

int colorNumber = System.Convert.ToInt32(((Range) worksheet.Cells[rowNumber,columnNumber]).Interior.Color);
Color color = System.Drawing.ColorTranslator.FromOle(colorNumber);

我需要這樣的東西:

int colorNumber = System.Convert.ToInt32(((Range) worksheet.Range[wsEvars.Cells[rowNumberFrom, columnNumberFrom], wsEvars.Cells[rowNumberTo, columnNumberTo]]).Interior.Color);
Color color = System.Drawing.ColorTranslator.FromOle(colorNumber);

// After execution colorNumber == 0

還有其他方法可以不必遍歷每一行來獲取顏色嗎?

您可以將整個范圍轉換為XML,然后使用XDocument進行解析,以節省大量的內部操作調用。 它僅循環每種樣式(=單元格范圍的格式):

using NetOffice.ExcelApi.Enums;
using System;
using System.Linq;
using System.Xml.Linq;
using System.Drawing;
using Excel = NetOffice.ExcelApi;

namespace S_43139465
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var app = Excel.Application.GetActiveInstance())
            {
                var range = (Excel.Range)app.Selection;
                var xml = (string)range.get_Value(rangeValueDataType: XlRangeValueDataType.xlRangeValueXMLSpreadsheet);

                var colors = XDocument.Parse(xml)
                                      .Descendants().First(n => n.Name.LocalName == "Styles")
                                      .Descendants().Where(n => n.Name.LocalName == "Interior")
                                      .Select(i => i.Attributes().FirstOrDefault(a => a.Name.LocalName == "Color"))
                                      .Where(a => a != null)
                                      .Select(a => a.Value)
                                      .Distinct()
                                      .Select(s => ColorTranslator.FromHtml(s));

                foreach (var color in colors)
                {
                    Console.WriteLine(color);
                }
            }

            Console.ReadLine();
        }
    }
}

暫無
暫無

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

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