2013-03-16 46 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文件。

相关问题