Azure 逻辑应用可以从存储帐户中读取 excel 文件吗?

Posted

技术标签:

【中文标题】Azure 逻辑应用可以从存储帐户中读取 excel 文件吗?【英文标题】:Can an Azure Logic App read an excel file from a storage account? 【发布时间】:2021-04-19 18:49:35 【问题描述】:

我有一个 excel 电子表格驻留在 Azure 存储帐户的容器中。

我可以使用带有“获取 Blob 内容”的 Azure 逻辑应用程序来访问该文件。但我找不到任何文档讨论从 blob 存储中实际读取 Azure 逻辑应用程序中的文件。请注意,OneDrive 或 Office365 中有用于访问 Excel 文件的连接器,但不是从存储帐户容器访问的。

尽管进行了激烈的搜索,但我没有在 Microsoft 文档或其他文档中找到有关此用例的任何讨论。任何链接将不胜感激。

从 Blob 存储读取/搜索 Azure 逻辑应用中的 excel 文件的最佳方法是什么?

【问题讨论】:

read an excel file 是什么意思?在逻辑应用中获取excel文件的内容? 正确。理想情况下,我希望能够在 excel 文件中搜索一个值并返回与我的搜索条件匹配的行。然后使用逻辑应用中该行的数据说,发送电子邮件。这可能意味着遍历行并检查特定列中的内容。 似乎不存在在逻辑应用程序中实现此要求的好解决方案。正如蒂亚戈提到的那样,使用 azure 函数并自己编写代码是一种解决方案。你介意将excel上传到OneDrive,然后你可以使用OneDrive连接器的操作。 【参考方案1】:

您可以将 Azure 函数添加到您的工作流程并轻松读取电子表格的内容:

public class ExcelFileContentExtractorService : IExcelFileContentExtractorService

    public ExcelFileRawDataModel GetFileContent(Stream fileStream)
    
        IDictionary<string, string> cellValues = new Dictionary<string, string>();
        IWorkbook workbook = WorkbookFactory.Create(fileStream);
        ISheet reportSheet = workbook.GetSheetAt(0);

        if (reportSheet != null)
        
            int rowCount = reportSheet.LastRowNum + 1;
            for (int i = 0; i < rowCount; i++)
            
                IRow row = reportSheet.GetRow(i);
                if (row != null)
                
                    foreach (var cell in row.Cells)
                    
                        var cellValue = cell.GetFormattedCellValue();
                        if (!string.IsNullOrEmpty(cellValue))
                        
                            cellValues.Add(cell.Address.FormatAsString(), cellValue);
                        
                    
                
            
        

        return new ExcelFileRawDataModel()
        
            Id = cellValues["A6"],
            CarBrand = cellValues["B6"],
            CarModel = cellValues["C6"],
            CarPrice = decimal.Parse(cellValues["D6"]),
            CarAvailability = int.Parse(cellValues["E6"])
        ;
    

来源:https://daniel-krzyczkowski.github.io/Extract-Excel-file-content-with-Azure-Logic-Apps-and-Azure-Functions/

【讨论】:

感谢您的参考。 Azure 函数是使用存储帐户中的 excel 文件的唯一方法吗? 如果它是唯一的选择,我不是 100%,但它肯定会在阅读内容时为您提供更好的灵活性【参考方案2】:

我尝试对 CSV 做同样的事情,但没有取得很大进展。根据我的经验,尝试解析文件内容很笨拙。有一些逻辑应用程序的 3rd 方插件(连接器),但我不愿意使用它们,因为我相信数据作为处理的一部分发送到 3rd 方站点。如果您的数据不是特别敏感,您可以试试这些连接器。

【讨论】:

同意。此外,您必须考虑成本,因为这些是第 3 方许可。【参考方案3】:

在这里我将补充我所学到的。

尽管在撰写本文时本机支持从 OneDrive 和 Sharepoint 读取 excel 文件,但 Microsoft 产品经理不知何故错过了 Azure 客户可能希望使用 Azure 工具(例如逻辑应用程序)从 Azure(存储帐户 blob)中读取他们的内容。

撰写本文时唯一的解决方案是创建一个生成 SAS 令牌并读取 blob 的 Azure 函数。

因此,我将蒂亚戈的回答标记为正确。

【讨论】:

以上是关于Azure 逻辑应用可以从存储帐户中读取 excel 文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

从 azure 逻辑应用程序创建一个不起作用

python 从 azure 存储帐户读取

从 ASP.NET 应用程序访问 Azure 存储帐户文件共享

如何使用异步方法从 Azure 函数中的存储读取

如何从 Azure Functions 中的存储容器读取多个文件

Azure 集成帐户 (Maps - XSLT) - 使用逻辑应用将 2 个不同的 XML 合并为单个 xml