2017-05-20 16 views
0

하늘의 SQL에서 일부 SQL 쿼리를 실행하고 데이터가 Excel 파일로 전송되는 콘솔 애플리케이션이 있습니다. 내 로컬 컴퓨터에서 정상적으로 작동합니다. 호 하지만이 서비스를 스케줄러로 사용하고 싶습니다. 그때 나는 생성 된 파일을 푸른 색으로 유지하는 법을 알고 있습니다. 위의 코드에서genate하는 방법 C# console 응용 프로그램을 사용하여 푸른 색 기억 장치에 파일을 엑셀로 저장 하시겠습니까?

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

위의 코드에서 "excelFilename"을 전달해야하는 것은 무엇입니까?

Azure에서는 Azure Blob Storage에 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; 
    } 
} 

위 방법을 사용하려면 두 번째 매개 변수에 파일 이름을 입력하기 만하면됩니다.

CreateExcelDocument(ds, "abc.xlsx"); 

그런 다음 blob 저장소의 excelfilecontainer에 abc.xlsx라는 파일이 생성됩니다. Azure Storage Explorer 또는 Azure Storage Client Library에서 보거나 다운로드 할 수 있습니다.

및 Excel 시트 또는 데이터 세트의 경우

enter image description here

개 이상의 있습니다. 그런 다음 새 시트를 추가하는 방법은 무엇입니까?

또한 블롭 데이터를 메모리 스트림으로 읽을 수 있습니다. 그런 다음이 스트림을 기반으로 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)) 
    { 

    } 
} 
+0

감사 및 시트 또는 데이터 세트가 두 개 이상인 경우 감사합니다. 그런 다음 새 시트를 추가하는 방법은 무엇입니까? – Abhi

+0

귀하의 의견에 따라 답장을 수정했습니다. SpreadsheetDocument를 사용하는 방법에 대한 도움이 더 필요하면 [openxml-sdk] 태그를 사용하여 새 질문을 게시하는 것이 좋습니다. 전문적인 도움을 받으실 수 있습니다. 문제가 해결되면 유용한 답장을 답으로 표시하는 것이 좋습니다. 표시된 스레드는 쉽게 검색됩니다. 유사한 문제를 겪고있는 다른 커뮤니티 회원들을 도울 것입니다. – Amor