2

私は次のものを持っています:

using(var memoryStream = new MemoryStream())
{
   gc.CreatePackage(memoryStream);
}

MemoryStream は、Excel ファイルを吐き出します。memoryStream から、生成されたファイルを実際に表示するにはどうすればよいですか。ファイルを実際にディスクに保存するのではなく、表示するだけであることに注意してください。

これまでのところ、次のものがありますが、機能していないようです。

using (var memoryStream = new MemoryStream())
{
    gc.CreatePackage(memoryStream);

    using (var fileStream = File.OpenWrite("Test.xlsx"))
    {
        memoryStream.WriteTo(fileStream);
    }                
}

しかし、私が正しい方向に進んでいるかどうかはわかりません。次のようなエラーが表示されます。

System.Web.Mvc.Controller.File(byte[], string)' は 'メソッド' であり、指定されたコンテキストでは無効です

これについて正しい方向に進んでいるかどうかはわかりません。

4

3 に答える 3

1

ASP.NET MVC を使用していると仮定すると、ファイル応答ヘルパーが必要になる可能性があります。

using (var memoryStream = new MemoryStream())
{
    gc.CreatePackage(memoryStream);
    memoryStream.Seek(0, SeekOrigin.Begin);
    return File(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}

ファイル ソースを実際にブラウザに表示させたい場合は、MIME タイプについて嘘をついてtext/plain代わりに使用することもできます。ほとんどの場合、ブラウザはこれをプレーン テキストとしてレンダリングします。

Fileダウンロードがエンドユーザーに表示されるファイル名を指定するために、3 番目のパラメーターを追加することもできます。

于 2012-12-19T21:10:33.653 に答える
0

あなたが投稿したエラーは、MVC コントローラーから生成されたファイルを返そうとしていることを示しているように見えるので、これがあなたが探しているものかもしれません。

public ActionResult MyAction()
{
    using (var memoryStream = new MemoryStream())
    {
        gc.CreatePackage(memoryStream);
        //Make sure the position of the stream is at 0
        memoryStream.Position = 0;
        //Return the contents of the stream with the appropriate MIME type
        return File(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    }
}
于 2012-12-19T21:12:02.267 に答える
0

MemoryMappedFile を使用して仮想ファイルを作成できます。

コード例:

書く:

  using (var mmf = MemoryMappedFile.CreateNew("MappedFileName", size, MemoryMappedFileAccess.ReadWriteExecute))
   {
       using (MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor())
       {
            accessor.Write(Write your data to mapped file);
       }
    }

読んだ:

  using (var mmf = MemoryMappedFile.OpenExisting("MappedFileName"))
    {
        using (MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor())
        {
            accessor.Read......
        }
    }
于 2012-12-19T21:26:41.020 に答える