2016-07-05 50 views
-1

在這個程序集中,我將excel文件直接導出到本地磁盤,但現在我試圖在兩個步驟中執行此操作: 首先將其寫入memorystream,然後將內存流保存到本地磁盤。不知道這是否正確。當我跑步時,它不會給我任何東西。想法?使用EPPlus的MemoryStream

public static void Createxlsx(string filename) 
{ 
    FileInfo newFile = new FileInfo ("C:\\ConsoleApplicationXLSX\\" + filename + ".xlsx"); 
    MemoryStream stream = new MemoryStream(); 

    //create a package 
    using (var package = new ExcelPackage(stream)) 
    { 
     var worksheet = package.Workbook.Worksheets.Add("worksheet"); 

     package.Save(); 
    } 
} 

回答

2
public static void Createxlsx(string filename) 
{ 
    MemoryStream stream = new MemoryStream(); 
    //create a package 
    using (var package = new ExcelPackage(stream)) // disposing ExcelPackage also disposes the above MemoryStream 
    { 
     var worksheet = package.Workbook.Worksheets.Add("worksheet"); 
     package.Save(); 

     // see the various ways to create/open a file, Create is just one of them 
     // open the file stream 
     using(var file = System.IO.File.Open("C:\\ConsoleApplicationXLSX\\" + filename + ".xlsx", System.IO.FileMode.CreateNew)) 
     { 
      stream.Position = 0; // reset the position of the memory stream 
      stream.CopyTo(file); // copy the memory stream to the file stream 
     } 
    } 
} 

的一些注意事項

  • using報表包裝你流(內存,文件等)。這將確保流在超出範圍之後始終釋放/釋放(使用實現的IDisposable接口)。
  • 請參閱FileMode,如果您嘗試覆蓋現有文件,則我選擇的上述CreateNew以上的選項將引發異常。如果你不關心那個用Create
  • 最後,您必須在複製流之前重置流的位置,否則它將拾取當前位置離開的位置,通常位於流的末尾。

編輯

你也可以這樣做沒有MemoryStream

public static void Createxlsx(string filename) 
{ 
    using(var file = System.IO.File.Open("C:\\ConsoleApplicationXLSX\\" + filename + ".xlsx", System.IO.FileMode.CreateNew)) 
    using (var package = new ExcelPackage(file)) // disposing ExcelPackage also disposes the above MemoryStream 
    { 
     var worksheet = package.Workbook.Worksheets.Add("worksheet"); 
     package.Save(); 
    } 
} 
0

您需要現在將內存流複製到文件。收藏此

using (fileStream = File.Open("C:\\ConsoleApplicationXLSX\\" + filename + ".xlsx")) 
{ 
    stream.Position = 0; 
    stream.CopyTo(fileStream); 
}