Здравствуйте!
Да, это вполне реально реализовать на C#. Вы можете использовать библиотеку **EPPlus** или **ClosedXML** для работы с файлами Excel, поскольку они позволяют легко манипулировать ячейками, форматированием и значениями в таблицах.
### Пример решения с использованием EPPlus:
1. Установите библиотеку EPPlus через NuGet:
```
Install-Package EPPlus
```
2. Используйте следующий код для открытия файла Excel, сравнения значений и изменения заливки ячеек:
```csharp
using OfficeOpenXml;
using OfficeOpenXml.Style;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Program
{
static void Main()
{
string filePath = "path_to_your_excel_file.xlsx"; // Укажите путь к вашему файлу
FileInfo fileInfo = new FileInfo(filePath);
using (ExcelPackage package = new ExcelPackage(fileInfo))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; // Предполагается, что данные на первом листе
int rows = worksheet.Dimension.End.Row;
int cols = worksheet.Dimension.End.Column;
// Список для хранения значений
HashSet<double> values = new HashSet<double>();
// Собираем значения из первых трех колонок
for (int row = 1; row <= rows; row++)
{
for (int col = 1; col <= 3; col++)
{
// Проверяем, не пустая ли ячейка
if (worksheet.Cells[row, col].Value != null)
{
double value;
if (double.TryParse(worksheet.Cells[row, col].Value.ToString(), out value))
{
values.Add(value);
}
}
}
}
// Сравниваем оставшиеся колонки и меняем заливку при совпадении
for (int row = 1; row <= rows; row++)
{
for (int col = 4; col <= cols; col++)
{
if (worksheet.Cells[row, col].Value != null)
{
double value;
if (double.TryParse(worksheet.Cells[row, col].Value.ToString(), out value))
{
if (values.Contains(value))
{
// Меняем заливку
worksheet.Cells[row, col].Style.Fill.PatternType = ExcelFillStyle.Solid;
worksheet.Cells[row, col].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.Yellow); // Укажите нужный цвет
}
}
}
}
}
// Сохраняем изменения
package.Save();
}
Console.WriteLine("Работа завершена.");
}
}
```
### Как работает код:
1. Вы создаете объект ExcelPackage, который загружает файл Excel.
2. Считываете значения из первых трех колонок и сохраняете их в хеш-сет (`HashSet<double>`) для исключения дубликатов.
3. После этого проходите по оставшимся колонкам, проверяя, есть ли значения из них в хеш-сете.
4. Если совпадение обнаружено, изменяете заливку ячейки.
5. Сохраняете изменения в файл.
### Примечания:
- Убедитесь, что файл Excel не открыт в других приложениях, когда вы выполняете код, чтобы избежать ошибок доступа.
- Выберите подходящий цвет для заливки по вашему усмотрению.
- Если значения в ваших ячейках имеют другой тип данных (например, текст), можете захотеть изменить соответствующую часть кода, чтобы обрабатывать этот тип.
Если у вас остались вопросы или нужна помощь с более конкретными частями кода, дайте знать!