我们很高兴宣布 GroupDocs.Merger for .NET v26.9 已于 2026年9月 发布。此版本引入了按行合并电子表格、通过 PageBuilder 改进 TIFF 页面选择、增强预览尺寸处理、解决 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] 在多线程环境下将 PDF 或 XPS 文档合并为 DOC 时修复损坏的 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.”)。
  • 超出行数限制(XLS/XLT 为 65,536 行,其他为 1,048,576 行)会抛出 GroupDocsMergerException。
  • 当以 Rows 模式合并的电子表格仍在等待时,调用 ApplyPageBuilder 会抛出 GroupDocsMergerException。

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。
  • 缺失的运行时依赖现在会抛出 MissingDependencyException,并指明缺失的组件及安装说明。

7. 将图像或音频合并到不支持的格式

将图像或音频文件合并到不支持的文档格式时会抛出 FileTypeNotSupportedException(“Joining ‘…’ into ‘…’ is not supported”)。

新特性

  • 按行电子表格合并:现在可以将多个电子表格的行追加到单个工作表,而不是作为独立工作表添加,并可选择跳过标题行以及按位置匹配工作表。
  • TIFF 文档的 PageBuilder:使用 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

直接下载

资源