В этой статье вы узнаете, как копировать листы из нескольких книг Excel в одну книгу с помощью C#. Вы также узнаете, как копировать данные с нескольких листов на один лист. Давайте начнем.

C# API для слияния нескольких файлов Excel

Aspose.Cells for .NET — это хорошо известный API для работы с электронными таблицами, который позволяет создавать и обрабатывать файлы Excel из приложений .NET. Вы можете либо скачать двоичные файлы API, либо установить его с помощью NuGet.

PM> Install-Package Aspose.Cells

Объединение нескольких файлов Excel в один с помощью C#

Иногда вам нужно объединить несколько файлов Excel в один файл. Вы хотите скопировать рабочие листы из исходных книг в целевую книгу, как показано ниже. Документы Excel могут быть любой версии, например Excel 97, Excel 2010 или Excel 2016.

Объединение нескольких файлов Excel в один с помощью C#

Рис. 1. Объединение файлов Excel

В следующем примере кода показано, как объединить несколько файлов Excel в один с помощью C#.

// Откройте первый файл Excel.
Workbook SourceBook1 = new Workbook("Excel A.xlsx");

// Откройте второй файл Excel.
Workbook SourceBook2 = new Workbook("Excel B.xlsx");

// Откройте третий файл Excel.
Workbook SourceBook3 = new Workbook("Excel C.xlsx");

// Скопируйте листы второго файла Excel в первую книгу.
SourceBook1.Combine(SourceBook2);

// Скопируйте листы третьего файла Excel в первую книгу.
SourceBook1.Combine(SourceBook3);

// Сохраните обновленный первый файл Excel как новый файл.
SourceBook1.Save("CombinedFile.xlsx");

Объединение определенных рабочих листов файлов Excel с помощью C#

Приведенный выше код копирует все рабочие листы в исходных файлах в целевой файл. Однако вы можете захотеть скопировать определенные рабочие листы из исходных файлов в конечный файл. Например, у вас есть два файла Excel, в каждом из которых есть три листа с названиями «Продажи», «Сотрудники» и «Расходы». Вам нужно только скопировать рабочий лист Sales из обоих файлов в целевой файл, как показано на следующем рисунке.

Объединение определенных рабочих листов файлов Excel с помощью C#

Рис. 2. Объединение определенных рабочих листов файлов Excel

В следующем примере кода показано, как объединить определенные рабочие листы исходных файлов в конечный файл с помощью C#.

// Откройте файл Excel A.
Workbook excelA = new Workbook("Excel A.xlsx");

// Откройте файл Excel B.
Workbook excelB = new Workbook("Excel B.xlsx");

// Создайте рабочую книгу назначения.
Workbook destWorkbook = new Workbook();
// Первый рабочий лист по умолчанию добавляется в рабочую книгу. Добавьте второй рабочий лист.
destWorkbook.Worksheets.Add();

// Скопируйте рабочий лист Sales из файла Excel A в файл назначения.
destWorkbook.Worksheets[0].Copy(excelA.Worksheets["Sales"]);

// Скопируйте рабочий лист Sales из файла Excel B в целевой файл.
destWorkbook.Worksheets[1].Copy(excelB.Worksheets["Sales"]);

// По умолчанию рабочие листы имеют имена «Лист1» и «Лист2» соответственно.
// Давайте дадим им осмысленные имена.
destWorkbook.Worksheets[0].Name = excelA.FileName + " - Sales";
destWorkbook.Worksheets[1].Name = excelB.FileName + " - Sales";

// Сохраните файл назначения.
destWorkbook.Save("CombinedFile.xlsx");

Объединить несколько рабочих листов в один с помощью C#

Иногда вам нужно скопировать данные из нескольких рабочих листов в один рабочий лист. Например, у вас есть несколько листов в файле Excel, содержащих информацию о разных продуктах, и вы хотите объединить эти листы в один итоговый лист, например:

Объединить несколько рабочих листов в один с помощью C#

Рис. 3. Объединение нескольких листов в один

В следующем фрагменте кода показано, как скопировать данные из нескольких листов в один лист с помощью C#.

// Откройте файл Excel, содержащий рабочие листы:
// Продукты1, Продукты2 и Продукты3
Workbook workbook = new Workbook("Products.xlsx");

// Добавьте рабочий лист с именем Summary_sheet
Worksheet summarySheet = workbook.Worksheets.Add("Summary_sheet");

// Переберите исходные листы, данные которых вы хотите скопировать в
// сводная таблица
string[] nameOfSourceWorksheets = { "Products1", "Products2", "Products3" };
int totalRowCount = 0;

foreach (string sheetName in nameOfSourceWorksheets)
{
    Worksheet sourceSheet = workbook.Worksheets[sheetName];

    Range sourceRange;
    Range destRange;
    // В случае рабочего листа Products1 включите все строки и столбцы.
    if (sheetName.Equals("Products1"))
    {
        sourceRange = sourceSheet.Cells.MaxDisplayRange;
        
        destRange = summarySheet.Cells.CreateRange(
                sourceRange.FirstRow + totalRowCount,
                sourceRange.FirstColumn,
                sourceRange.RowCount,
                sourceRange.ColumnCount);
    }
    // В случае рабочих листов Products2 и Products3,
    // исключить первую строку (содержащую заголовки).
    else
    {
        int mdatarow = sourceSheet.Cells.MaxDataRow; // Zero-based
        int mdatacol = sourceSheet.Cells.MaxDataColumn; // Zero-based
        sourceRange = sourceSheet.Cells.CreateRange(0 + 1, 0, mdatarow, mdatacol + 1);

        destRange = summarySheet.Cells.CreateRange(
                sourceRange.FirstRow + totalRowCount -1,
                sourceRange.FirstColumn,
                sourceRange.RowCount,
                sourceRange.ColumnCount);
    }

    // Копирует данные, форматирование, объекты рисования и т. д. из
    // диапазон источника в диапазон назначения.
    destRange.Copy(sourceRange);
    totalRowCount = sourceRange.RowCount + totalRowCount;
}

// Сохраните книгу 
workbook.Save("Summarized.xlsx");

Вывод

В этой статье вы узнали, как программно объединить несколько файлов Excel в один. Вы можете скопировать все рабочие листы исходного файла или отдельные листы в целевой файл. Вы также узнали, как объединить данные нескольких рабочих листов в один рабочий лист. Пожалуйста, ознакомьтесь с документацией Aspose.Cells для .NET для получения дополнительной информации. Если у вас есть вопросы, задавайте их на нашем Форуме поддержки. Мы ответим на них в течение нескольких часов.

Смотрите также