2016-07-05 84 views
-1

このアセンブリでは、excelファイルをローカルディスクに直接エクスポートしていましたが、今は2つのステップでこれを実行しようとしています。 最初に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); 
} 
関連する問題