首页 > 解决方案 > 使用azure函数将大型excel拆分为多个excel文件

问题描述

我可以在函数中拆分 excel 文件,但是在 azure 函数上发布时会出现超时异常。怎么办。天蓝色的持久功能如何在这里提供帮助?

这就是我的做法:

        bookOriginal.LoadFromStream(BlobService.GetFileFromBlob(filename));
        log.LogInformation("File read from Azure Blob");
        Worksheet sheet = bookOriginal.Worksheets[0];
        var totalRow = sheet.Rows.Count();
        int splitRows = 7000;
        int count = totalRow / splitRows;
        for (int i = 1; i <= count; i++)
        {
            CellRange range1;
            Workbook newBook1 = new Workbook();
            newBook1.CreateEmptySheets(1);
            Worksheet newSheet1 = newBook1.Worksheets[0];
            Model localModel = new Model();
            if (i == 1)
            {
                range1 = sheet.Range[2, 1, splitRows, sheet.LastColumn];
            }
            else
            {
                range1 = sheet.Range[(splitRows * (i - 1)) + 1, 1, splitRows * i, sheet.LastColumn];
            }

            newSheet1.Copy(range1, newSheet1.Range[1, 1]);
            
            //bookOriginal.SaveToFile("Research and Development.xlsx", ExcelVersion.Version2007);
            localModel.workbookObject = newBook1;
            model.Add(localModel);
        }
        Console.WriteLine("Ran Completely");

标签: c#azure

解决方案


是的,耐用的功能肯定可以帮助您!您可以查看此链接https://docs.microsoft.com/it-it/azure/azure-functions/durable/durable-functions-overview?tabs=csharp 第一种和第二种模式可以帮助您。项目结构可以是:

  • 一个 blob 触发函数,用于下载源 excel,将其转换为一个对象,您可以将其作为输入传递,以调用 orchestrator 。
  • 编排器函数反序列化输入对象并对行进行分组,就像您在代码中所做的那样
  • 在 foreach 语句中,您可以使用当前的行组作为参数来调用活动。您可以选择活动是按顺序运行(作为模式 1 等待活动)还是并行运行(作为模式 2,使用 Task.WhenAll)
  • 活动功能将行组转换为excel文件,并使用blob属性作为输出,将其上传到存储中

警告:持久的函数文档说:返回值被序列化为 JSON 并保存到 Azure 表存储中的业务流程历史记录表。

所以输入模型必须可序列化为 json。


推荐阅读