我在 Azure 存储帐户的容器中有一个 excel 文件。我需要使用 C# 最好使用 BlobTrigger 模板,使用 Azure 函数动态更新具有输入参数的列的行。已经有了读取 blob 的代码,但没有找到任何可以更新文件的内容。
谢谢
我尝试使用 SpreadsheetDocument 类,但无法走得太远。
如果您想执行此操作,则需要在本地下载 blob 并进行更改,然后将其推送回来,如果多个用户同时访问文件,这会导致问题。
您应该研究 SQL 数据库存储解决方案。
如果您想尝试的话,我为您提供了简单的上传/下载 blob 方法。您将需要插入自己的逻辑来在本地更新文档。
public async Task DownloadBlobs()
{
var blob = "<BLOB_NAME>";
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( "DefaultEndpointsProtocol=https;AccountName=<ACCOUNT_NAME>;AccountKey=<ACCOUNT_KEY>");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("<CONTAINER_NAME>");
CloudBlockBlob blockBlob = container.GetBlockBlobReference(blob);
string path = $@"C:\Temp\{blob}.csv";
string directoryPath = Path.GetDirectoryName(path);
if (!Directory.Exists(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
try
{
using (var fileStream = System.IO.File.OpenWrite(path))
{
await blockBlob.DownloadToStreamAsync(fileStream);
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
public async Task UploadBlob()
{
string path = @"C:\Temp\<BLOB_NAME>.csv";
try
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( "DefaultEndpointsProtocol=https;AccountName=<ACCOUNT_NAME>;AccountKey=<ACCOUNT_KEY>");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("<CONTAINER_NAME>");
CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobFilePath.Split(@"\Temp\").LastOrDefault());
CloudBlockBlob blob = container.GetBlockBlobReference(blobFilePath.Split(@"\Temp\").Last());
await blob.UploadFromFileAsync(blobFilePath);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}