2017-09-22 1 views
0

ダウンロードしたファイルをここで保存アプリケーションフォルダに保存したいのですが、データシートからExcelシートとしてファイルをダウンロードしました。私はデータテーブルからダウンロードしたファイルをダウンロードするためのパスを取らず、アプリケーションフォルダに保存したい。これどうやってするの?ダウンロードしたExcelファイルのデータをデータテーブルからASP.NETのアプリケーションフォルダに保存する方法

マイコード:

public void ExportToExcel(DataSet ds) 
     {   
      using (XLWorkbook wb = new XLWorkbook()) 
      { 
       foreach (DataTable dt in ds.Tables) 
       { 
        //Add DataTable as Worksheet. 
        wb.Worksheets.Add(dt); 
       } 
       //Export the Excel file. 
       Response.Clear(); 
       Response.Buffer = true; 
       Response.Charset = ""; 
       Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       Response.AddHeader("content-disposition", "attachment;filename=Report.xlsx");     
       using (MemoryStream MyMemoryStream = new MemoryStream()) 
       { 
        wb.SaveAs(MyMemoryStream); 
        MyMemoryStream.WriteTo(Response.OutputStream);     
        Response.TransmitFile(Server.MapPath("~/Files/Report.xlsx"));// I added this but it shows error 
        Response.Flush();     
        Response.End(); 
       } 
      } 
     } 
+0

送信したいファイルに実際に名前を付けていないようです。ディレクトリパスのみがそこに表示されています – DiskJunky

+0

こんにちは@DiskJunky、ファイル名を取ったときにも 'ファイルが見つかりませんでした 'と表示されます – User777

+0

それはそのファイルをそのパスに置くことができないことを意味します。 'Server.MapPath()'の内容を 'Response.TransmitFile()'の前に文字列変数に入れると、それが解決するパスが得られます。 Windowsエクスプローラでナビゲートすると、そこにファイルがありますか? – DiskJunky

答えて

0

それは物事の順序の意味を理解するためにしばらく時間がかかったが、TransmitFile()への呼び出しを削除すると動作するはずです。あなたはすでにMemoryStreamでファイルを書き出しています。

public void ExportToExcel(DataSet ds) 
    {   
     using (XLWorkbook wb = new XLWorkbook()) 
     { 
      foreach (DataTable dt in ds.Tables) 
      { 
       //Add DataTable as Worksheet. 
       wb.Worksheets.Add(dt); 
      } 
      //Export the Excel file. 
      Response.Clear(); 
      Response.Buffer = true; 
      Response.Charset = ""; 
      Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      Response.AddHeader("content-disposition", "attachment;filename=Report.xlsx");     
      using (MemoryStream MyMemoryStream = new MemoryStream()) 
      { 
       wb.SaveAs(MyMemoryStream); 
       MyMemoryStream.WriteTo(Response.OutputStream);     
       Response.Flush();     
       Response.End(); 
      } 
     } 
    } 

これが標準のMVCコントローラアクションであれば、応答ははるかに簡単で、

public FileStreamResult ExportToExcel(DataSet ds) 
    {   
     using (XLWorkbook wb = new XLWorkbook()) 
     { 
      foreach (DataTable dt in ds.Tables) 
      { 
       //Add DataTable as Worksheet. 
       wb.Worksheets.Add(dt); 
      } 
      using (MemoryStream MyMemoryStream = new MemoryStream()) 
      { 
       wb.SaveAs(MyMemoryStream); 
       return FileStreamResult(MyMemoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
      } 
     } 
    } 
+0

こんにちは、私はデータセットのテーブルを持っています。私はそれをデータテーブルに取り込み、その行をExcelシートとして直接ダウンロードしています。 – User777

+0

あなたは何を意味するのか分かりません。解決策は、ブックの作成方法の元のコードに基づいています。ワークブックからは 'MemoryStream'に行き、そこからファイルをダウンロードする要求に直接書き込まれます。 – DiskJunky

+0

こんにちは、@DiskJunky、これは私の要件です、私はExcelシートにデータをエクスポートしたいので、同じシートをダウンロードしてメールの添付ファイルのように送る必要があります。ありがとうございます – User777

関連する問題