2016-07-05 11 views
-1

In dieser Assembly habe ich Excel-Datei direkt auf die lokale Festplatte exportieren, aber jetzt versuche ich, dies in zwei Schritten zu tun: zuerst, um es in memorystream zu schreiben, und speichern Sie den Speicherstrom auf die lokale Scheibe. Nicht sicher, ob das stimmt oder nicht. es gibt mir nichts, wenn ich renne. Gedanken?MemoryStream mit EPPlus

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

Antwort

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

Einige Anmerkungen

  • Ihre Streams Wrap (Speicher, Datei, usw.) in using Aussagen. Dies stellt sicher, dass der Stream immer freigegeben/freigegeben wird (unter Verwendung der implementierten IDisposable-Schnittstelle), nachdem er außerhalb des Bereichs ist.
  • Siehe FileMode, die Option Ich wählte oben CreateNew wird eine Ausnahme auslösen, wenn Sie versuchen, eine vorhandene Datei zu überschreiben. Wenn Sie sich nicht darum kümmern, verwenden Sie stattdessen Create.
  • Schließlich müssen Sie die Position des Streams zurücksetzen, bevor Sie es kopieren, andernfalls wird es an der Stelle, an der die aktuelle Position unterbrochen ist, abgreifen und befindet sich normalerweise am Ende des Streams.

bearbeiten

Sie könnten auch dies tun, ohne die 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

Sie müssen jetzt den Speicherstream in die Datei kopieren. Fügen Sie diese

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