Мы рады объявить о выпуске GroupDocs.Merger for .NET v26.9, доступном с сентября 2026 года. В этом релизе реализовано построчное объединение электронных таблиц, улучшен выбор страниц TIFF через PageBuilder, усовершенствовано управление размерами предварительного просмотра, устранены проблемы конкурентного доступа при работе с Visio и DOC, а также заменены несколько режимов «тихого» сбоя на понятные исключения — API стал более надёжным и предсказуемым.

Что нового в этом выпуске

  • [Feature] Объединение строк Excel из нескольких файлов в один лист (MERGERNET-2198)
  • [Feature] Применение выбора страниц PageBuilder к первому документу TIFF (MERGERNET-1372)
  • [Improvement] Генерация исключения, если SetLicense не может найти файл лицензии (MERGERNET-2183)
  • [Improvement] Отклонение пустого потока лицензии в SetLicense (MERGERNET-2184)
  • [Improvement] Генерация чёткого исключения при попытке объединить изображение или аудиофайл в неподдерживаемый формат (MERGERNET-2190)
  • [Improvement] Удаление System.Drawing.Common из кроссплатформенных пакетов и чёткое сообщение о недостающих зависимостях (MERGERNET-2202)
  • [Bug] Закрытие исходного файла после того, как Merger открыл или объединил документ по пути (MERGERNET-2187)
  • [Bug] Вызов фабрики потоков только один раз при создании Merger (MERGERNET-2189)
  • [Bug] Исправление повреждённого вывода DOC при объединении PDF или XPS в DOC из нескольких потоков (MERGERNET-2192)
  • [Bug] Применение изменения ориентации страницы ко всем страницам, если номера страниц не указаны (MERGERNET-2194)
  • [Bug] Учет запрошенной ширины и высоты предварительного просмотра во всех семействах форматов документов (MERGERNET-2196)
  • [Bug] Отклонение ExtractPages и RemovePages, вызванных без указания номеров страниц, вместо тихого создания пустого или неизменённого документа (MERGERNET-2197)
  • [Bug] Исправление случайных сбоев Visio‑документов с ArgumentNullException trueTypeFont при одновременной обработке (MERGERNET-2199)
  • [Bug] Исправление сбоев PDF‑портфелей с NullReferenceException, когда вложенный файл не имеет даты изменения (MERGERNET-2200)

Изменения публичного API

1. Объединение электронных таблиц — построчный режим (новый API)

Новые публичные типы в пространстве имён GroupDocs.Merger.Domain.Options:

Тип Описание
SpreadsheetJoinOptions Параметры объединения для электронных таблиц, наследуются от PageJoinOptions. Свойства: Mode, SkipRows, SheetMatching.
SpreadsheetJoinMode Worksheets (по умолчанию) добавляет листы объединяемого файла как отдельные листы, как и раньше. Rows добавляет строки каждого объединяемого файла ниже последней строки с данными соответствующего листа результата.
SpreadsheetSheetMatching ByIndex (по умолчанию) добавляет лист 2 к листу 2, лист 3 к листу 3 и т.д.; FirstSheetOnly добавляет только первый лист каждого объединяемого файла.
  • SkipRows пропускает первые N строк каждого объединяемого файла, например строку заголовка. Первый документ всегда берётся полностью. SkipRows и SheetMatching не влияют в режиме Worksheets.
  • Поддерживаемые форматы: XLSX, XLS, XLSM, XLSB, XLTX, XLTM, XLT, XLAM и ODS.
  • Переносятся: значения ячеек, формулы (относительные ссылки корректируются), стили, объединённые ячейки и высоты строк. Не переносятся: диаграммы, изображения, сводные таблицы, таблицы, условное форматирование и проверка данных.
  • Отрицательное значение SkipRows генерирует GroupDocsMergerException («The count of rows to skip can not be negative.»).
  • Превышение лимита строк (65 536 для XLS/XLT, 1 048 576 для остальных) генерирует GroupDocsMergerException.
  • ApplyPageBuilder генерирует GroupDocsMergerException, пока ожидается объединение таблицы в режиме Rows.

2. TIFF — PageBuilder применяет выбор страниц первого документа

Изменений в API нет. CreatePageBuilder и ApplyPageBuilder теперь применяют выбранные страницы из первого TIFF‑документа; ранее всегда включались все страницы первого документа. Объединения без использования PageBuilder дают тот же результат, что и раньше.

После объединения с ImageJoinOptions CreatePageBuilder и ApplyPageBuilder теперь генерируют GroupDocsMergerException, потому что объединённые изображения компонуются в один макет, а не в последовательность страниц.

3. Лицензирование — SetLicense больше не «тихо» падает

  • License.SetLicense(string licensePath) генерирует InvalidOperationException («License not found: …») при отсутствии файла лицензии.
  • License.SetLicense(Stream licenseStream) генерирует ArgumentNullException для пустого потока.

4. Операции со страницами при пустом списке страниц

  • ExtractPages и RemovePages, вызванные без номеров страниц, теперь генерируют GroupDocsMergerException («There are no page numbers to extract.» / «There are no page numbers to remove.»).
  • ChangeOrientation, вызванный без номеров страниц, теперь меняет ориентацию каждой страницы для PDF, XPS, документов обработки текста, электронных таблиц и Visio.

5. Размер предварительного просмотра

GeneratePreview теперь изменяет размер изображения каждой страницы до запрошенных Width и Height — растягивая до точных размеров, если указаны оба параметра. Отрицательное значение Width или Height теперь генерирует GroupDocsMergerException.

6. System.Drawing.Common и недостающие зависимости

  • Кроссплатформенные пакеты (GroupDocs.Merger.Net60, GroupDocs.Merger.Net80, GroupDocs.Merger.Net100) больше не зависят от System.Drawing.Common.
  • При отсутствии необходимых runtime‑зависимостей генерируется MissingDependencyException с указанием недостающего компонента и инструкциями по установке.

7. Объединение изображений и аудио в неподдерживаемые форматы

Попытка объединить изображение или аудиофайл в неподдерживаемый формат теперь генерирует FileTypeNotSupportedException («Joining ‘…’ into ‘…’ is not supported»).

Новые возможности

  • Построчное объединение электронных таблиц: строки нескольких таблиц теперь могут быть добавлены в один лист вместо создания отдельных листов, с возможностью пропуска строк‑заголовков и сопоставления листов по позиции.
  • PageBuilder для TIFF‑документов: выбор страниц, сделанный с помощью PageBuilder, теперь применяется и к первому TIFF‑документу — ранее все его страницы всегда включались.
  • Точные размеры предварительного просмотра: GeneratePreview теперь возвращает изображения с запрошенными Width и Height для всех семейств форматов документов.
  • Исправления конкурентных проблем: вывод Visio и DOC больше не падает случайно при обработке из нескольких потоков.
  • Управление ресурсами: документы, открытые или объединённые по пути к файлу, больше не оставляют исходный файл открытым; фабрики потоков вызываются ровно один раз.
  • Более понятные ошибки: несколько операций, ранее «тихо» завершавшихся с ошибкой, теперь бросают описательные исключения.

Пример кода

using GroupDocs.Merger;
using GroupDocs.Merger.Domain.Options;

using (var merger = new Merger("january.xlsx"))
{
    var options = new SpreadsheetJoinOptions
    {
        Mode = SpreadsheetJoinMode.Rows,   // добавить строки в существующие листы
        SkipRows = 1                        // пропустить строку заголовка в каждом объединяемом файле
    };

    merger.Join("february.xlsx", options);
    merger.Join("march.xlsx", options);
    merger.Save("q1.xlsx");
}

Как получить обновление

NuGet

  • Пакет: GroupDocs.Merger 26.9.0
  • Команда установки:
    dotnet add package GroupDocs.Merger --version 26.9.0
    

Прямая загрузка

Ресурсы