В этой статье вы узнаете, как копировать листы из нескольких книг Excel в одну книгу с помощью C#. Вы также узнаете, как копировать данные с нескольких листов на один лист. Давайте начнем.
- Объединение нескольких файлов Excel в один с помощью C#
- Объедините определенные рабочие листы файлов 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.

Рис. 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 из обоих файлов в целевой файл, как показано на следующем рисунке.

Рис. 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, содержащих информацию о разных продуктах, и вы хотите объединить эти листы в один итоговый лист, например:

Рис. 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 для получения дополнительной информации. Если у вас есть вопросы, задавайте их на нашем Форуме поддержки. Мы ответим на них в течение нескольких часов.