2012-10-11 19 views
16

Estoy construyendo una aplicación de consola que mueve los datos a un archivo de Excel (usando la biblioteca EPPlus). Estoy guardando ExcelPackage como un MemoryStream, y quiero adjuntarlo a un correo electrónico. Sin embargo, cuando recibo el correo electrónico, el archivo de Excel está vacío: 0 bytes.EPPlus con MemoryStream como archivo adjunto de correo electrónico: el archivo está vacío

¿Pensamientos?

 MemoryStream outputStream = new MemoryStream(); 
     using (ExcelPackage package = new ExcelPackage(outputStream)) { 

       // export each facility's rollup and detail to tabs in Excel (two tabs per facility) 
       ExcelWorksheet facilityWorksheet = package.Workbook.Worksheets.Add(row["facility_id"].ToString()); 
       ExcelWorksheet facilityDetail = package.Workbook.Worksheets.Add(row["facility_id"].ToString() + "-detail"); 

       facilityWorksheet.Cells.LoadFromDataTable(rollupData, true); 
       facilityDetail.Cells.LoadFromDataTable(rawExceptions, true); 

       package.Save(); 
     } 

Aquí está el código para crear el archivo adjunto de correo electrónico:

Attachment attachment = new Attachment(outputStream, "ECO_exceptions.xlsx", "application/vnd.ms-excel"); 
+1

Gracias, útil publicación, si no es demasiado problema, por favor edite para que el paquete.Guardar(); está en la sección de USO. –

Respuesta

24

Después de un poco más de búsqueda, he encontrado la solución. Aparentemente, necesitaba establecer explícitamente la posición de inicio del MemoryStream antes de pasarlo como un archivo adjunto. La siguiente línea de código hizo el truco:

outputStream.Position = 0; 
+0

me salvó el día. ¡Muchas gracias! –

+0

tyvm para compartir :) +1 – Christos

Cuestiones relacionadas