如何使用 C# 控制台应用程序在 Azure 存储上生成 excel 文件?
How to genrate excel file on azure storage using c# console application?
我有一个控制台应用程序,它在 azure SQL 上触发一些 SQL 查询,数据将传输到 excel 文件中。这在我的本地计算机上运行良好。
问题
但我想在 azure 服务上托管这个 .exe 作为调度程序。那个时候我意识到,如何让我生成的文件 excel 保持在 azure 状态。
public static bool CreateExcelDocument(DataSet ds, string excelFilename)
{
try
{
using (SpreadsheetDocument document = SpreadsheetDocument.Create(excelFilename, SpreadsheetDocumentType.Workbook))
{
WriteExcelFile(ds, document);
}
Trace.WriteLine("Successfully created: " + excelFilename);
return true;
}
catch (Exception ex)
{
Trace.WriteLine("Failed, exception thrown: " + ex.Message);
return false;
}
}
在上面的代码中,我需要传递什么 "excelFilename"?
In above code, What I need to pass "excelFilename"?
在 Azure 中,我建议将 excel 文件保存到 Azure Blob 存储。根据您的代码,您可以创建一个新的 excel 托管在内存流中。将数据写入此 excel 文件后,我们可以将内存流上传到 Blob 存储。以下代码供您参考。
public static bool CreateExcelDocument(DataSet ds, string fileName)
{
try
{
MemoryStream ms = new MemoryStream();
using (SpreadsheetDocument document = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook))
{
WriteExcelFile(ds, document);
}
//You need to create a storage account and put your azure storage connection string in following place
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("put your azure storage connection string here");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("excelfilecontainer");
container.CreateIfNotExists();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);
ms.Position = 0;
blockBlob.UploadFromStream(ms);
return true;
}
catch (Exception ex)
{
return false;
}
}
使用upper方法,只需要将文件名放在第二个参数中即可。
CreateExcelDocument(ds, "abc.xlsx");
之后,将在您的 Blob 存储的 excelfilecontainer 中创建一个名为 abc.xlsx 的文件。您可以从 Azure 存储资源管理器或 Azure 存储客户端库查看或下载它。
And If excel sheet or dataset have more than one. Then how to add new sheet ?
我们还可以将 blob 数据读取到内存流中。然后我们可以打开一个基于这个流的 SpreadsheetDocument。添加新的 sheet 后。我们需要将这个流保存回 blob 存储。这是示例代码。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("storage connection string");
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("excelfilecontainer");
// Retrieve reference to a blob named "myblob.txt"
CloudBlockBlob blockBlob = container.GetBlockBlobReference("abc.xlsx");
using (var memoryStream = new MemoryStream())
{
blockBlob.DownloadToStream(memoryStream);
memoryStream.Position = 0;
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(memoryStream, false))
{
}
}
我有一个控制台应用程序,它在 azure SQL 上触发一些 SQL 查询,数据将传输到 excel 文件中。这在我的本地计算机上运行良好。 问题 但我想在 azure 服务上托管这个 .exe 作为调度程序。那个时候我意识到,如何让我生成的文件 excel 保持在 azure 状态。
public static bool CreateExcelDocument(DataSet ds, string excelFilename)
{
try
{
using (SpreadsheetDocument document = SpreadsheetDocument.Create(excelFilename, SpreadsheetDocumentType.Workbook))
{
WriteExcelFile(ds, document);
}
Trace.WriteLine("Successfully created: " + excelFilename);
return true;
}
catch (Exception ex)
{
Trace.WriteLine("Failed, exception thrown: " + ex.Message);
return false;
}
}
在上面的代码中,我需要传递什么 "excelFilename"?
In above code, What I need to pass "excelFilename"?
在 Azure 中,我建议将 excel 文件保存到 Azure Blob 存储。根据您的代码,您可以创建一个新的 excel 托管在内存流中。将数据写入此 excel 文件后,我们可以将内存流上传到 Blob 存储。以下代码供您参考。
public static bool CreateExcelDocument(DataSet ds, string fileName)
{
try
{
MemoryStream ms = new MemoryStream();
using (SpreadsheetDocument document = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook))
{
WriteExcelFile(ds, document);
}
//You need to create a storage account and put your azure storage connection string in following place
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("put your azure storage connection string here");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("excelfilecontainer");
container.CreateIfNotExists();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);
ms.Position = 0;
blockBlob.UploadFromStream(ms);
return true;
}
catch (Exception ex)
{
return false;
}
}
使用upper方法,只需要将文件名放在第二个参数中即可。
CreateExcelDocument(ds, "abc.xlsx");
之后,将在您的 Blob 存储的 excelfilecontainer 中创建一个名为 abc.xlsx 的文件。您可以从 Azure 存储资源管理器或 Azure 存储客户端库查看或下载它。
And If excel sheet or dataset have more than one. Then how to add new sheet ?
我们还可以将 blob 数据读取到内存流中。然后我们可以打开一个基于这个流的 SpreadsheetDocument。添加新的 sheet 后。我们需要将这个流保存回 blob 存储。这是示例代码。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("storage connection string");
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("excelfilecontainer");
// Retrieve reference to a blob named "myblob.txt"
CloudBlockBlob blockBlob = container.GetBlockBlobReference("abc.xlsx");
using (var memoryStream = new MemoryStream())
{
blockBlob.DownloadToStream(memoryStream);
memoryStream.Position = 0;
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(memoryStream, false))
{
}
}