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
相关产品推荐
相关产品推荐

