2013-03-16 72 views
2

嗨我正在使用EPPPlus來返回一個Excel文件,併發送相同的文件作爲附件。 我可以打開excel文件並獲得附件,但是當我打開電子郵件附件時,出現錯誤消息說文件已損壞。 請看看Belwo代碼並提出改變建議。EPP加Excel作爲附件

MemoryStream outputStream = new MemoryStream(); 
       using (ExcelPackage pck = new ExcelPackage(outputStream)) 
       { 
        //Create the worksheet 
        ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo"); 

        //Load the datatable into the sheet, starting from cell A1. Print the column names on row 1 
        ws.Cells["A1"].LoadFromDataTable(tbl, true); 

        //Format the header for column 1-3 
        using (ExcelRange rng = ws.Cells[1, 1, 1, tbl.Columns.Count]) 
        { 
         rng.Style.Font.Bold = true; 
         rng.Style.Fill.PatternType = ExcelFillStyle.Solid;      //Set Pattern for the background to Solid 
         rng.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(79, 129, 189)); //Set color to dark blue 
         rng.Style.Font.Color.SetColor(Color.White); 
        } 
        //Example how to Format Column 1 as numeric 
        using (ExcelRange col = ws.Cells[2, 1, 2 + tbl.Rows.Count, 1]) 
        { 
         col.Style.Numberformat.Format = "#,##0.00"; 
         col.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right; 
        } 
        MailMessage mail = null; 
        try 
        { 
         mail = new MailMessage(); 
         mail.From = new MailAddress("[email protected]", "Adidas SystemMail"); 
         mail.To.Add(new MailAddress(emailAddress)); 
         mail.Subject = "Store Finder Geocoding"; 
         mail.IsBodyHtml = true; 
         string message = ""; 
         message += ".LLHere is the attachment with list of stores and geocode values you requested." + "</br>"; 
         mail.Body = message; 
         outputStream.Position = 0; 
         Attachment attachment = new Attachment(outputStream, "Geocoding.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
         mail.Attachments.Add(attachment); 
         mail.SubjectEncoding = System.Text.Encoding.UTF8; 
         mail.BodyEncoding = System.Text.Encoding.UTF8; 
         SmtpClient client = new SmtpClient("localhost"); 
         client.Send(mail); 
        } 
        catch (Exception ex) 
        { 
         //throw ex; 
        } 
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
        Response.AddHeader("content-disposition", String.Format(CultureInfo.InvariantCulture, "attachment; filename={0}", "geo.xlsx")); 
        Response.BinaryWrite(pck.GetAsByteArray()); 
        Response.End(); 
+0

有什麼建議嗎? – user2132124 2013-03-17 10:56:09

回答

1

我沒有測試過這一點,但我的猜測是,你需要保存ExcelPackage創建Outlook附件之前。例如:

// ... 
mail.Body = message; 

pck.Save(); 

outputStream.Position = 0; 
Attachment attachment = new Attachment(outputStream, "Geocoding.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
mail.Attachments.Add(attachment); 
// ... 

因爲它永遠不會被保存,所以它不會寫任何內容到輸出流。空流會導致格式不正確的xlsx文件。

相關問題