c# - 使用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");
解决方案
是的,耐用的功能肯定可以帮助您!您可以查看此链接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。
推荐阅读
- node.js - CommonJS 与 JSON?
- python - 如何使用来自第二个数据帧的值填充新列,但依赖于当前数据帧中不同的现有列使用 Pandas
- ruby-on-rails - 在 Rails 项目中找不到源对象
- python - requests.get 对图像很慢
- c++ - 未定义对“yylex”的引用,msys2/mingw 问题
- java - Spring Data JPA - 不同查询的不同连接
- json - 解码为超类的子类数组
- three.js - Threejs 阴影:如何更新深度材质?
- google-chrome - 如果我修复并重新启动了 2 年以上未更新的损坏的 Chrome 扩展程序,它会从商店中删除吗?
- r - R - Table () 不返回 2 路表