Анализ изменений между версиями электронных таблиц — рутинная задача для финансов, отчетности и процессов проверки данных. GroupDocs.Comparison Cloud SDK for .NET предоставляет мощный API, который упрощает сравнение файлов Excel в .NET без ручного осмотра. В этом руководстве вы узнаете, как настроить библиотеку, загрузить рабочие книги, вызвать REST‑endpoint из C#, получить подробную информацию об изменениях и тонко настроить параметры сравнения для точных результатов.

Перед началом: предварительные требования и установка

Прежде чем начать, убедитесь, что у вас есть следующее:

  • .NET 6.0 или более поздней версии установлен.
  • IDE, например Visual Studio 2022.
  • Учетная запись GroupDocs Cloud с ClientId и ClientSecret.
  • Доступ к хранилищу GroupDocs Cloud, куда будут загружаться файлы Excel.

Установите SDK через NuGet:

dotnet add package GroupDocs.Comparison-Cloud

Скачайте последнюю версию пакета со страницы релизов. После установки добавьте свои учетные данные в код, как показано ниже. Теперь вы готовы начать процесс сравнения.

Пошаговое руководство по сравнению файлов Excel в .NET

Следующие шаги иллюстрируют, как сравнить файлы Excel в .NET с использованием SDK.

Шаг 1: Загрузите исходный и целевой документы

Создайте объект конфигурации с вашими учетными данными и создайте экземпляр CompareApi.

var config = new Configuration
{
    ClientId = "YOUR_CLIENT_ID",
    ClientSecret = "YOUR_CLIENT_SECRET"
};

var compareApi = new CompareApi(config);

Шаг 2: Подготовьте рабочие книги Excel

Определите объекты FileInfo, которые указывают на исходные и целевые файлы XLSX в облачном хранилище GroupDocs Cloud.

var sourceFile = new FileInfo { FilePath = "input/source.xlsx" };
var targetFile = new FileInfo { FilePath = "input/target.xlsx" };

Шаг 3: Установите параметры сравнения и настройки

Настройте объект CompareOptions, включая подробные настройки изменений.

var compareOptions = new CompareOptions
{
    SourceFile = sourceFile,
    TargetFiles = new List<FileInfo> { targetFile },
    OutputPath = "output/diff_result.xlsx",
    Settings = new Settings
    {
        ShowDeletedContent = true,
        ShowInsertedContent = true,
        ShowStyleChanges = true,
        GenerateSummaryPage = true
    }
};

Для полного списка настроек см. к справке API.

Шаг 4: Выполнить сравнение и обработать результаты

Вызовите метод Compare и прочитайте базовую информацию о результате.

var compareResult = compareApi.Compare(compareOptions);
Console.WriteLine($"Comparison completed. Result file: {compareResult.Path}");
Console.WriteLine($"Number of changes detected: {compareResult.Changes?.Count ?? 0}");

Шаг 5: Получить подробную информацию об изменениях

Если вам нужен детальный отчёт, используйте запрос GetChanges.

var changesRequest = new GetChangesRequest
{
    SourceFile = sourceFile,
    TargetFile = targetFile,
    OutputPath = "output/detailed_changes.json"
};
var detailedChanges = compareApi.GetChanges(changesRequest);
Console.WriteLine($"Detailed changes saved to: {detailedChanges.Path}");

С помощью этих шагов вы полностью автоматизировали процесс сравнения файлов Excel в .NET.

Сравнение файлов Excel программно - Полный пример кода

Следующий код демонстрирует полный рабочий процесс от настройки до обработки результата.

using System;
using System.Collections.Generic;
using GroupDocs.Comparison.Cloud.Sdk.Api;
using GroupDocs.Comparison.Cloud.Sdk.Client;
using GroupDocs.Comparison.Cloud.Sdk.Model;

namespace CompareExcelDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Set up API credentials (replace with your actual credentials)
            var config = new Configuration
            {
                ClientId = "YOUR_CLIENT_ID",
                ClientSecret = "YOUR_CLIENT_SECRET"
            };

// Initialize Compare API
            var compareApi = new CompareApi(config);

// Prepare source and target Excel files (must be uploaded to GroupDocs Cloud storage beforehand)
            var sourceFile = new FileInfo { FilePath = "input/source.xlsx" };
            var targetFile = new FileInfo { FilePath = "input/target.xlsx" };

// Define comparison options
            var compareOptions = new CompareOptions
            {
                SourceFile = sourceFile,
                TargetFiles = new List<FileInfo> { targetFile },
                OutputPath = "output/diff_result.xlsx",
                // Optional: specify that we want detailed changes for worksheets
                Settings = new Settings
                {
                    ShowDeletedContent = true,
                    ShowInsertedContent = true,
                    ShowStyleChanges = true,
                    GenerateSummaryPage = true
                }
            };

try
            {
                // Call the Compare API
                var compareResult = compareApi.Compare(compareOptions);

// Output basic result information
                Console.WriteLine($"Comparison completed. Result file: {compareResult.Path}");
                Console.WriteLine($"Number of changes detected: {compareResult.Changes?.Count ?? 0}");

// Iterate through change details
                if (compareResult.Changes != null)
                {
                    foreach (var change in compareResult.Changes)
                    {
                        Console.WriteLine("--------------------------------------------------");
                        Console.WriteLine($"Change Type   : {change.ChangeType}");
                        Console.WriteLine($"Worksheet     : {change.Worksheet}");
                        Console.WriteLine($"Cell Address  : {change.CellAddress}");
                        Console.WriteLine($"Old Value     : {change.OldValue}");
                        Console.WriteLine($"New Value     : {change.NewValue}");
                        Console.WriteLine($"Is New Row    : {change.IsNewRow}");
                        Console.WriteLine($"Is New Column : {change.IsNewColumn}");
                    }
                }

// Retrieve detailed changes via GetChanges (optional)
                var changesRequest = new GetChangesRequest
                {
                    SourceFile = sourceFile,
                    TargetFile = targetFile,
                    OutputPath = "output/detailed_changes.json"
                };
                var detailedChanges = compareApi.GetChanges(changesRequest);
                Console.WriteLine($"Detailed changes saved to: {detailedChanges.Path}");
            }
            catch (ApiException apiEx)
            {
                Console.WriteLine($"API error: {apiEx.ErrorCode} - {apiEx.Message}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Unexpected error: {ex.Message}");
            }
        }
    }
}

Примечание: Этот пример кода демонстрирует основную функциональность. Прежде чем использовать его в вашем проекте, убедитесь, что обновили все пути к файлам и значения конфигурации в соответствии с вашей реальной средой, проверили, что все необходимые зависимости правильно установлены, и тщательно протестировали в вашей среде разработки. Если вы столкнётесь с какими‑либо проблемами, пожалуйста, обратитесь к официальной документации или свяжитесь с командой поддержки для получения помощи.

Выполнить сравнение Excel через REST с помощью cURL

Вы можете достичь того же результата, не пишя код на C#, вызывая REST API напрямую.

1. Аутентификация и получение токена доступа

curl -X POST "https://api.groupdocs.cloud/v1.0/oauth2/token" \
     -H "Content-Type: application/json" \
     -d '{"client_id":"YOUR_CLIENT_ID","client_secret":"YOUR_CLIENT_SECRET"}'

2. Загрузите исходную рабочую книгу

curl -X PUT "https://api.groupdocs.cloud/v1.0/storage/file?path=input/source.xlsx" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -T "./source.xlsx"

3. Загрузите целевую книгу

curl -X PUT "https://api.groupdocs.cloud/v1.0/storage/file?path=input/target.xlsx" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -T "./target.xlsx"

4. Выполнить сравнение

curl -X POST "https://api.groupdocs.cloud/v1.0/comparison/compare" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{
           "source_file": {"file_path":"input/source.xlsx"},
           "target_files": [{"file_path":"input/target.xlsx"}],
           "output_path":"output/diff_result.xlsx",
           "settings": {
               "show_deleted_content": true,
               "show_inserted_content": true,
               "show_style_changes": true,
               "generate_summary_page": true
           }
         }'

5. Скачайте полученную книгу diff

curl -X GET "https://api.groupdocs.cloud/v1.0/storage/file?path=output/diff_result.xlsx" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -o diff_result.xlsx

Для полного списка параметров см. официальную документацию API.

Заключение

С помощью GroupDocs.Comparison Cloud SDK for .NET вы можете легко сравнивать файлы Excel в .NET и получать детальную книгу diff, в которой выделяются все изменения. REST‑ориентированная архитектура SDK позволяет интегрировать сравнение электронных таблиц в любой сервис C#, веб‑API или фоновую задачу с минимальными усилиями. Не забудьте получить соответствующую лицензию для использования в продакшене; временная лицензия доступна на странице лицензий, а полные сведения о лицензировании указаны на сайте продукта. Начните автоматизировать свои рабочие процессы сравнения Excel уже сегодня и избавьтесь от ошибок ручной проверки.

Часто задаваемые вопросы

  • Как сравнить Excel‑файлы в .NET без написания большого количества кода?
    SDK берёт на себя всю тяжёлую работу. Вам нужно лишь настроить учётные данные, указать два файла XLSX и вызвать compareApi.Compare. Библиотека возвращает файл diff и список объектов изменений.

  • В каком формате используется результат diff?
    По умолчанию результат сохраняется в виде рабочей книги XLSX, сохраняющей оригинальное расположение и отображающей визуальные маркеры для удалений, вставок и изменений стилей.

  • Можно ли сравнивать защищённые паролем книги Excel?
    Да. Укажите пароль в свойстве Password объекта FileInfo. API разблокирует книгу перед выполнением сравнения.

  • Нужна ли лицензия для разработки и тестирования?
    Временную лицензию можно получить на странице лицензий. Для развертывания в продакшн необходимо приобрести полную лицензию, как описано на странице продукта.

Читать далее