2016-12-20 408 views
1

ウェブサイトで.xlsmファイルをエクスポートしようとしていますが、何か助けになるものが見つからないようです。以下は、xlsxファイルの構築をテストするための簡単な例です(動作します)。 epplusを使用して.xlsmファイルを作成する

@using OfficeOpenXml; 
<html> 
    <body> 
     <div id="page-wrapper"> 
     @{ 
      // Change file extension to xlsm to test 
      string fileExtension = "xlsm"; 
      ExcelPackage p = new ExcelPackage(); 
      p.Workbook.Worksheets.Add("Worksheet Name"); 
      int LatestWorksheetNumber = p.Workbook.Worksheets.Count; 
      ExcelWorksheet ws = p.Workbook.Worksheets[LatestWorksheetNumber]; 

      ws.Cells[1, 1].Value = "Test"; 

      //Generate A File 
      Byte[] bin = p.GetAsByteArray(); 
      string filename = "filename"; 
      try 
      { 
       //Download the file as an attachment 
       Response.Clear(); 
       Response.ClearContent(); 
       Response.ClearHeaders(); 
       Response.Cookies.Clear(); 

       string ContentType = ""; 
       if (fileExtension == "xlsx") 
       { 
        ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       } 
       else 
       { 
        ContentType = "application/vnd.ms-excel.sheet.macroEnabled.12"; 
       } 
       Response.GetType(); 
       Response.ContentType = ContentType; 
       Response.AddHeader("content-disposition", "attachment; filename=" + filename + "." + fileExtension); 
       Response.BinaryWrite(bin); 
       Response.End(); 
       <p>File Created</p> 
      } 
      catch (Exception e) 
      { 
       <p>@e.Message</p> 
      } 

     } 
    </div> 
</body> 
</html> 

生成されたファイルを.xlsmするファイルの拡張子を変更することが、私はExcelでファイルを開こうとすると、私は拡張子が正しくないというエラーを取得した後。私が変更しなければならないのは、コンテンツタイプヘッダーだけだと思ったが、それは明らかに問題ではない。ほかに何が私は行方不明ですか?どんな指導もいただければ幸いです!

+2

あなたは[サンプル](https://github.com/pruiz/EPPlus/blob/master/SampleApp/Sample15.cs)を見たことがありますか? –

+1

おそらく、あなたは 'p.Workbook.CreateVBAProject'でVBAプロジェクトを作成するのを忘れていました。 – Xiaoy312

+0

ダン、リンクをありがとう。以前サンプルを見ていなかったので、将来の質問に役立つようブックマークしています。しかし、Xiaoy312の提案は私の問題を解決しました。両方のおかげで! – Michael

答えて

1

Xiaoy312が問題を解決しました! Byte[] bin = p.GetAsByteArray();の前にp.Workbook.CreateVBAProject();を追加すると、私の問題が解決しました。他のすべては同じままでしたが、Excelが実際にファイルを開きます!ここでは同じ問題を持っている人のための私の最終的なコードがあります:

@using OfficeOpenXml; 
<html> 
    <body> 
     <div id="page-wrapper"> 
      @{ 
       // Change file extension to xlsm to test 
       string FileExtension = "xlsm"; 
       ExcelPackage p = new ExcelPackage(); 
       p.Workbook.Worksheets.Add("Worksheet Name"); 
       int LatestWorksheetNumber = p.Workbook.Worksheets.Count; 
       ExcelWorksheet ws = p.Workbook.Worksheets[LatestWorksheetNumber]; 
      ws.Cells[1, 1].Value = "Test"; 

      p.Workbook.CreateVBAProject(); 

      //Generate A File 
      Byte[] bin = p.GetAsByteArray(); 
      string filename = "filename"; 
      try 
      { 
       //Download the file as an attachment 
       Response.Clear(); 
       Response.ClearContent(); 
       Response.ClearHeaders(); 
       Response.Cookies.Clear(); 

       string ContentType = ""; 
       if (FileExtension == "xlsx") 
       { 
        ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       } 
       else 
       { 
        ContentType = "application/vnd.ms-excel.sheet.macroEnabled.12"; 
       } 
       Response.GetType(); 
       Response.ContentType = ContentType; 
       Response.AddHeader("content-disposition", "attachment; filename=" + filename + "." + FileExtension); 
       Response.BinaryWrite(bin); 
       Response.End(); 
       <p>File Created</p> 
      } 
      catch (Exception e) 
      { 
       <p>@e.Message</p> 
      } 
     } 
    </div> 
</body> 
</html> 
関連する問題