объединить несколько файлов Excel в один с помощью Java

У вас есть несколько книг Excel, и вы хотите объединить их в один файл для создания отчетов или хранения данных в одном месте. Как разработчик Java, вы можете легко программно объединить несколько файлов Excel в один файл. В этой статье вы узнаете, как объединить несколько файлов Excel в один с помощью Java.

В этой статье обсуждаются/рассматриваются следующие темы:

Java API для слияния файлов Excel

Для объединения нескольких файлов Excel я буду использовать Aspose.Cells for Java API. Этот API позволяет создавать электронные таблицы, манипулировать ими, преобразовывать, защищать или печатать их, не полагаясь на Microsoft Excel. Это позволяет программно выполнять функции автоматизации Excel в ваших приложениях Java.

Вы можете загрузить JAR API или просто добавить следующую конфигурацию pom.xml в свое Java-приложение на основе Maven, чтобы попробовать приведенные ниже примеры кода.

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cells</artifactId>
    <version>21.8</version>
</dependency>

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

Вы можете легко объединить несколько файлов Excel в один файл программно, выполнив шаги, указанные ниже:

  • Создайте экземпляр класса Workbook с первым исходным файлом.
  • Создайте экземпляр класса Workbook со вторым исходным файлом.
  • Повторите описанный выше шаг для объединения более двух файлов.
  • Вызовите метод combine() со вторым экземпляром исходного файла.
  • Повторите вышеуказанный шаг для всех исходных файлов один за другим.
  • Сохраните выходной файл, вызвав метод save() класса Workbook.

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

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

// Откройте второй файл Excel.
Workbook SourceBook2 = new Workbook("C:\\Files\\Quarter_2.xlsx");

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

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

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

// Сохраните обновленный первый файл Excel как новый файл.
SourceBook1.save("C:\\Files\\CombinedFile.xlsx");
Объединение нескольких файлов Excel в один с помощью Java

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

Класс Workbook API — это основной класс, используемый для создания электронной таблицы Excel. Это позволяет вам открывать и сохранять собственные файлы Excel. Он также предоставляет несколько свойств и методов для работы с электронными таблицами Excel. Метод combine() этого класса объединяет текущую книгу с другим объектом Workbook. Метод save() класса Workbook сохраняет выходной файл по указанному пути к файлу.

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

Вы можете легко объединить определенные рабочие листы из нескольких файлов Excel в один файл программно, выполнив шаги, указанные ниже:

  • Создайте экземпляр класса Workbook для исходного файла 1.
  • Создайте экземпляр класса Workbook для исходного файла 2.
  • Повторите описанный выше шаг для объединения рабочих листов из более чем двух файлов.
  • Создайте экземпляр класса Workbook для целевого файла.
  • Добавьте рабочие листы, используя метод add() класса WorksheetCollection.
  • Вызовите метод copy(), чтобы скопировать указанный рабочий лист из исходного файла 1 в целевой файл.
  • Вызовите метод copy(), чтобы скопировать указанный рабочий лист из исходного файла 2 в целевой файл.
  • Переименуйте листы в целевом файле с помощью метода setName().
  • Сохраните конечный файл, вызвав метод save() класса Workbook.

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

String sourceFile1 = "Quarter_1.xlsx";
String sourceFile2 = "Quarter_2.xlsx";

// Откройте первый файл Excel.
Workbook excelA = new Workbook("C:\\Files\\" + sourceFile1);

// Откройте второй файл Excel.
Workbook excelB = new Workbook("C:\\Files\\" + sourceFile2);

// Создайте рабочую книгу назначения.
Workbook destWorkbook = new Workbook();

// Первый рабочий лист по умолчанию добавляется в рабочую книгу. Добавьте второй рабочий лист.
destWorkbook.getWorksheets().add();

// Скопируйте рабочий лист января из первого файла Excel в целевой файл.
destWorkbook.getWorksheets().get(0).copy(excelA.getWorksheets().get("Jan"));

// Скопируйте рабочий лист Jul из второго файла Excel в целевой файл.
destWorkbook.getWorksheets().get(1).copy(excelB.getWorksheets().get("Jul"));

// По умолчанию рабочие листы имеют имена «Лист1» и «Лист2» соответственно.
// Давайте дадим им осмысленные имена.
destWorkbook.getWorksheets().get(0).setName(sourceFile1 + " - Jan");
destWorkbook.getWorksheets().get(1).setName(sourceFile2 + " - Jul");

// Сохраните файл назначения.
destWorkbook.save("C:\\Files\\CombinedSpecificSheetsInFile.xlsx");
Объедините определенные рабочие листы из нескольких файлов Excel в один с помощью Java

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

Метод свойств getWorksheets() класса Workbook возвращает коллекцию всех рабочих листов в Workbook. Вы можете добавить рабочий лист в коллекцию рабочих листов с помощью метода add().

Класс Worksheet этого API представляет один рабочий лист. Он предоставляет несколько свойств и методов для работы с рабочим листом. Метод copy() этого класса копирует содержимое и форматы с другого рабочего листа. Класс Worksheet также предоставляет методы get() для получения определенного рабочего листа по его индексу или имени. Метод свойства setName() задает имя рабочего листа.

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

Вы можете легко объединить несколько рабочих листов файла Excel в один рабочий лист программно, выполнив шаги, указанные ниже:

  • Создайте экземпляр класса Workbook для исходного файла.
  • Добавьте новый лист с помощью метода add().
  • Переберите исходные листы и выполните следующие действия:
    • создать диапазон ячеек и столбцов для одного рабочего листа с помощью метода createRange()
    • Скопируйте данные из исходного диапазона в целевой диапазон, используя метод copy().
  • Сохраните выходной файл, вызвав метод save() класса Workbook.

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

// Откройте файл Excel, содержащий рабочие листы:
// Январь, февраль, март и апрель
Workbook workbook = new Workbook("C:\\Files\\Quarter_1.xlsx");

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

// Выполните итерацию по исходным листам, чтобы скопировать данные в
// сводная таблица
String[] nameOfSourceWorksheets = { "Jan", "Feb", "Mar", "Apr" };
int totalRowCount = 0;

for (String sheetName : nameOfSourceWorksheets)
{
  // Получить рабочий лист
    Worksheet sourceSheet = workbook.getWorksheets().get(sheetName);

    Range sourceRange = null;
    Range destRange = null;

    // В случае рабочего листа Jan включите все строки и столбцы.
    if (sheetName.equals("Jan"))
    {
        sourceRange = sourceSheet.getCells().getMaxDisplayRange();

        destRange = summarySheet.getCells().createRange(
                sourceRange.getFirstRow() + totalRowCount,
                sourceRange.getFirstColumn(),
                sourceRange.getRowCount(),
                sourceRange.getColumnCount());
    }
    // В случае других рабочих листов,
    // исключить первую строку (содержащую заголовки).
    else
    {
        int mdatarow = sourceSheet.getCells().getMaxDataRow(); // Zero-based
        int mdatacol = sourceSheet.getCells().getMaxDataColumn(); // Zero-based
        sourceRange = sourceSheet.getCells().createRange(0 + 1, 0, mdatarow, mdatacol + 1);

        destRange = summarySheet.getCells().createRange(
                sourceRange.getFirstRow() + totalRowCount -1,
                sourceRange.getFirstColumn(),
                sourceRange.getRowCount(),
                sourceRange.getColumnCount());
    }

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

// Сохраните книгу 
workbook.save("C:\\Files\\Summarized.xlsx");
Объединение нескольких рабочих листов в один рабочий лист с помощью Java

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

Метод свойств getCells() класса Worksheet предоставляет коллекцию ячеек, доступных на рабочем листе. Класс Cells API представляет собой набор объектов, относящихся к ячейке, таких как Cell, Row и т. д. Свойство getMaxDisplayRange() Метод класса Cells предоставляет максимальный диапазон, который включает данные, объединенные ячейки и фигуры. Класс Range представляет диапазон ячеек в электронной таблице.

Класс Cells предоставляет следующие методы для создания диапазона ячеек:

  • createRange(int firstIndex, int number, boolean isVertical) для создания объекта Range из строк ячеек или столбцов ячеек.
  • createRange(int firstRow, int firstColumn, int totalRows, int totalColumns) для создания объекта Range из диапазона ячеек.
  • Метод createRange(адрес java.lang.String) создает объект Range из адреса диапазона.
  • Метод createRange(java.lang.String upperLeftCell, java.lang.String lowerRightCell) создает объект Range из диапазона ячеек.

Метод copy() класса Range копирует все виды данных (включая формулы), форматирование, объекты рисования и т. д. из исходного диапазона в диапазон назначения.

Объединение столбцов нескольких листов в один с помощью Java

Вы можете легко объединить столбцы нескольких рабочих листов в один рабочий лист программно, выполнив шаги, указанные ниже:

  • Создайте экземпляр класса Workbook для исходного файла.
  • Добавьте новый лист с помощью метода add().
  • Переберите исходные листы и выполните следующие действия:
    • Скопируйте все столбцы один за другим, используя метод copyColumn() с ячейками исходных листов и индексом столбца.
  • Сохраните выходной файл, вызвав метод save() класса Workbook.

В следующем примере кода показано, как объединить столбцы нескольких листов в один лист с помощью Java.

// Откройте рабочую книгу.
Workbook workbook = new Workbook("C:\\Files\\sample.xlsx");

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

// Итерируйте рабочие листы, чтобы скопировать столбцы в
// сводная таблица
String[] nameOfSourceWorksheets = { "Products", "Sales", "Customers" };
int totalCol = 0; 

for (String sheetName : nameOfSourceWorksheets) {
  Worksheet sourceSheet = workbook.getWorksheets().get(sheetName);

  if (sheetName.equals("Products")) {
    // Получить коллекцию столбцов рабочего листа
    ColumnCollection columns = sourceSheet.getCells().getColumns();

    // скопировать столбец в summaySheet
    for (Column column : (Iterable<Column>) columns)
    {
      summarySheet.getCells().copyColumn(sourceSheet.getCells(), column.getIndex(), totalCol);
      totalCol = totalCol + 1;
    }
    }
  else {
    // Получить коллекцию столбцов рабочего листа
    ColumnCollection columns = sourceSheet.getCells().getColumns();

    // скопировать столбец в summaySheet
    for (Column column : (Iterable<Column>) columns)
    {
      summarySheet.getCells().copyColumn(sourceSheet.getCells(), column.getIndex(), totalCol);
      totalCol = totalCol + 1;
    }
  }
}

// Сохраните файл Excel.
workbook.save("C:\\Files\\CopyingColumns_out.xlsx");
Объединение столбцов нескольких листов в один с помощью Java

Объединение столбцов нескольких листов в один с помощью Java

Метод свойств getColumns() класса Cells предоставляет коллекцию столбцов, доступных на листе. Класс ColumnCollection представляет собой набор отдельных столбцов на рабочем листе, тогда как класс Column представляет один столбец на рабочем листе.

Метод copyColumn() класса Cells копирует данные и форматирует весь столбец. Класс Cells также предоставляет перегруженные методы copyColumn() для копирования данных с параметрами PasteOptions, номером столбца, итоговыми столбцами источника и назначения и т. д.

Получить бесплатную лицензию

Вы можете попробовать API без ограничений по ознакомительной версии, запросив бесплатную временную лицензию.

Вывод

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

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