[英]Excel Interop C#: I want to select a range of cells with colored background as ExcelRange
[英]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.