我们很高兴宣布 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 文档间歇性出现
ArgumentNullExceptiontrueTypeFont 的问题 (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
- Package: GroupDocs.Merger 26.9.0
- 安装命令:
dotnet add package GroupDocs.Merger --version 26.9.0