You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何将Blob存储的Excel工作表添加为生成字节流工作表的第2表

在C#中合并两个Excel文件:把Blob中的工作表追加到动态生成的Excel里

要实现把Blob存储里的Instructions.xlsx作为第二个工作表,合并到你已经生成的DbRecords.xlsx中,推荐用EPPlus库处理Excel操作,配合Blob存储SDK读取文件。下面是具体实现步骤和代码:

1. 安装必要的NuGet包

先在项目中安装两个依赖包:

  • 处理Excel:EPPlus(商用场景注意:EPPlus 5+需要购买许可证,免费场景可选择4.5.3.3版本)
  • 读取Blob:Azure.Storage.Blobs(如果是其他Blob存储,替换为对应SDK即可)

2. 核心实现代码

假设你的DbRecords.xlsx是动态生成在内存流中,Blob为Azure存储:

using OfficeOpenXml;
using Azure.Storage.Blobs;
using System.IO;

// 1. 从Blob存储读取Instructions.xlsx到内存流
var blobServiceClient = new BlobServiceClient("你的Blob连接字符串");
var blobContainerClient = blobServiceClient.GetBlobContainerClient("你的容器名称");
var blobClient = blobContainerClient.GetBlobClient("Instructions.xlsx");

using var instructionsStream = new MemoryStream();
await blobClient.DownloadToAsync(instructionsStream);
instructionsStream.Position = 0; // 重置流位置到开头

// 2. 加载已生成的DbRecords.xlsx内存流(假设你已持有该流,命名为dbRecordsStream)
dbRecordsStream.Position = 0;
using var dbPackage = new ExcelPackage(dbRecordsStream);

// 3. 复制Instructions的工作表到DbRecords包中
using var instructionsPackage = new ExcelPackage(instructionsStream);
var targetWorksheet = instructionsPackage.Workbook.Worksheets.First(); // 取目标工作表
// 复制到目标包,位置设为第二个工作表(索引1,从0开始计数)
targetWorksheet.CopyTo(dbPackage.Workbook, targetWorksheet.Name, 1);

// 4. 保存合并后的文件(可保存到内存流、本地文件或回传Blob)
using var finalStream = new MemoryStream();
await dbPackage.SaveAsAsync(finalStream);
finalStream.Position = 0;

// 示例:保存到本地文件
// await File.WriteAllBytesAsync("FinalCombined.xlsx", finalStream.ToArray());

关键注意事项

  • 如果DbRecords.xlsx是本地文件,直接用new ExcelPackage(new FileInfo("DbRecords.xlsx"))加载即可。
  • 若Instructions.xlsx包含多个工作表,可通过名称指定要复制的表:instructionsPackage.Workbook.Worksheets["指定工作表名"]。
  • 操作流时务必重置Position到0,避免出现读取为空的问题。
  • 不想用EPPlus的话,也可以用NPOI库实现,核心逻辑一致。

内容的提问来源于stack exchange,提问作者CSharp User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:01:28