2017-05-20 1 views
0

Ich habe eine Konsolenanwendung, die einige SQL-Abfragen auf Azure SQL auslöst und Daten in Excel-Datei übertragen werden. Dies funktioniert auf meinem lokalen Computer einwandfrei. Problem Aber ich möchte diese .exe auf azure Service als Scheduler hosten. Zu dieser Zeit merke ich, wie ich meine generierte Datei auf Azurblau halten kann.Wie generiere Excel-Datei auf azurblaue Speicher mit C# -Konsolenanwendung?

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; 
 
      } 
 
     }

In obigen Code, Was muss ich "excelFilename" zu übergeben?

Antwort

1

Im obigen Code, Was ich "ExcelFilename" übergeben muss?

In Azure empfehle ich, speichern Sie die Excel-Datei zu Azure Blob Storage. Basierend auf Ihrem Code können Sie ein neues Excel erstellen, das im Speicherstream gehostet wird. Nachdem wir Daten in diese Excel-Datei geschrieben haben, können wir den Speicherstream nach Blob Storage hochladen. Code unten ist für Ihre Referenz.

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; 
    } 
} 

obere Methode zu verwenden, müssen Sie nur die Dateinamen in dem zweiten Parameter zu platzieren.

CreateExcelDocument(ds, "abc.xlsx"); 

Danach wird eine Datei mit dem Namen abc.xlsx wird in excelfilecontainer Ihrer Blob Storage erstellt werden. Sie können sie im Azure Storage Explorer oder in der Azure Storage Client-Bibliothek anzeigen oder herunterladen.

enter image description here

Und wenn Excel-Tabelle oder Datenmenge mehr als eine. Dann, wie man neues Blatt hinzufügt?

Wir könnten auch die Blob-Daten in einen Speicher-Stream lesen. Dann können wir ein SpreadsheetDocument öffnen, das auf diesem Stream basiert. Nach dem Hinzufügen eines neuen Blattes. Wir müssen diesen Stream in den Blobspeicher zurückspeichern. Hier ist der Beispielcode.

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)) 
    { 

    } 
} 
+0

Danke, und wenn Excel Blatt oder Datensatz mehr als eins haben. Dann, wie man neues Blatt hinzufügt? – Abhi

+0

Ich habe meine Antwort basierend auf Ihrem Kommentar geändert. Wenn Sie weitere Hilfe zur Verwendung von SpreadsheetDocument benötigen, empfehle ich Ihnen, eine neue Frage mit einem [openxml-sdk] -Tag zu posten. Sie werden dort mehr professionelle Hilfe bekommen. Wenn Ihr Problem gelöst ist, empfehle ich Ihnen, eine hilfreiche Antwort als Antwort zu markieren. Ein Thread, der markiert wurde, wird einfach durchsucht. Es wird anderen Community-Mitgliedern helfen, die ähnliche Probleme haben. – Amor