如何在Blob Trigger Azure Function中使用EPPlus读取Blob存储的Excel文件
Blob Trigger Azure Function 结合EPPlus处理Excel文件实现方案
1. 获取Blob文件路径
你不需要额外重新解析存储连接字符串构造Blob引用,触发绑定已经注入了完整的CloudBlockBlob实例myBlob,直接获取对应路径属性即可:
- 容器内的相对路径(含虚拟目录前缀):直接使用已经传入的
name参数 - Blob的完整访问URI:调用
myBlob.Uri.AbsoluteUri
如果确实需要手动构造BlobReference,参考代码:
CloudBlobClient blobClient = IMAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference("myblobcontainer"); CloudBlockBlob blobReference = container.GetBlockBlobReference(name);
2. 读取Blob转换为EPPlus Excel对象
直接调用CloudBlockBlob的OpenReadAsync方法获取文件流,传入EPPlus的ExcelPackage即可完成转换,注意EPPlus 5及以上版本商用需要申请许可,非商用场景可声明非商业使用,完整实现代码如下:
// 触发方法调整为异步适配异步读取逻辑 public async void Run([BlobTrigger("myblobcontainer/{name}", Connection = "AzureStorage")]CloudBlockBlob myBlob, string name, ILogger log) { try { await ProcessData(myBlob,name); } catch (Exception ex) { log.LogError(ex, "处理文件失败,文件名:{name}", name); } } public async Task<int> ProcessData(CloudBlockBlob myBlob, string name) { // 过滤非Excel文件 if(!name.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase)) { return 0; } // EPPlus 5+版本需指定许可上下文,商用请设置为Commercial并申请授权 ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 直接从注入的myBlob对象打开流读取Excel using(var blobStream = await myBlob.OpenReadAsync()) using(var excelPackage = new ExcelPackage(blobStream)) { // 此处已拿到可操作的Excel对象,可按需处理工作表、单元格等 var workSheet = excelPackage.Workbook.Worksheets.FirstOrDefault(); if(workSheet != null) { // 示例:读取第一行第一列单元格内容 var firstCellValue = workSheet.Cells[1,1].Text; // 后续业务逻辑 } } return 1; }
内容的提问来源于stack exchange,提问作者Viveka
相关产品推荐
相关产品推荐

