Azure Blob Storage:移除Excel工作簿密码的C#实现问题咨询
解决方案
你触发报错的核心原因是:打开受密码保护的Excel文件时,ExcelPackage构造函数没有传入原始密码参数。以下是可直接运行的移除密码实现代码:
依赖包
Azure.Storage.Blobs:Azure Blob Storage官方SDKEPPlus:Excel操作库,建议使用4.5.3.3及以上稳定版本
实现代码
// 初始化Blob客户端 BlobServiceClient blobServiceClient = new BlobServiceClient(appsetting); BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName); BlobClient blobClient = containerClient.GetBlobClient(fileName); // 若使用EPPlus 5.x及以上版本,需要先配置许可证(非商业用途设置为NonCommercial即可) ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 移除密码逻辑 using (var blobStream = await blobClient.OpenReadAsync(new BlobOpenReadOptions(true))) // 传入原始加密密码,即可正常打开受保护的Excel文件 using (ExcelPackage package = new ExcelPackage(blobStream, originalPassword)) { // 不传入密码导出字节流,即为无密码的Excel文件 byte[] unprotectedExcelBytes = package.GetAsByteArray(); using var uploadStream = new MemoryStream(unprotectedExcelBytes); uploadStream.Position = 0; // 直接覆盖上传原Blob,无需提前删除旧文件 await blobClient.UploadAsync(uploadStream, overwrite: true); }
注意事项
- 必须传入加密时使用的原始密码初始化
ExcelPackage,否则会触发文件格式错误、权限不足等异常 - 上传时指定
overwrite: true参数可以直接覆盖原加密文件,简化操作流程 - 处理大体积Excel文件时,建议先将Blob内容下载到本地临时文件处理,避免内存占用过高
内容的提问来源于stack exchange,提问作者slyp93
相关产品推荐
相关产品推荐

