EPP加Excel作为附件

您好,我正在使用EPPPlus返回一个Excel文件,也发送相同的文件作为附件。 我可以打开Excel文件,也得到了附件,但是当我打开电子邮件附件,我得到错误消息说文件已损坏。 请看Belwo代码,并build议我进行更改。

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("placescms@adidas-group.com", "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(); 

我没有testing过这个,但是我的猜测是,在创buildOutlook附件之前需要保存ExcelPackage 。 就像是:

 // ... 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); // ... 

因为它永远不会被保存,所以不会写任何东西到输出stream。 空stream将会导致格式不正确的xlsx文件。