如何使用c#console应用程序在exure存储上生成excel文件?

时间:2017-05-20 07:14:57

标签: azure-storage-blobs azure-scheduler

我有一个控制台应用程序,它会触发对azure SQL的一些SQL查询,数据将转移到excel文件中。这在我的本地计算机上工作正常。 问题 但是我想把这个.exe作为调度程序托管在azure服务上。那段时间我意识到,如何让我生成的文件在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”?

1 个答案:

答案 0 :(得分:1)

  

在上面的代码中,我需要传递什么" 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存储客户端库中查看或下载它。

enter image description here

  

如果excel表或数据集有多个。那么如何添加新工作表?

我们还可以将blob数据读取到内存流中。然后我们可以根据这个流打开一个SpreadsheetDocument。添加新工作表后。我们需要将此流保存回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))
    {

    }
}