2012-10-11 8 views
16

Buduję aplikację konsolową, która przenosi dane do pliku Excela (przy użyciu biblioteki EPPlus). Zapisuję pakiet ExcelPackage jako MemoryStream i chcę dołączyć go do wiadomości e-mail. Jednak po otrzymaniu wiadomości e-mail plik programu Excel jest pusty - 0 bajtów.EPPlus z MemoryStream jako załącznik wiadomości e-mail - plik jest pusty

Myśli?

 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(); 
     } 

Oto kod do tworzenia e-maila:

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

Dziękuję, pomocny wpis, jeśli nie ma większego problemu, edytuj tak, aby package.Save(); znajduje się w sekcji USING. –

Odpowiedz

24

Po pewnym więcej poszukiwań, znalazłem rozwiązanie. Najwyraźniej musiałem jawnie ustawić początkową pozycję obiektu MemoryStream, zanim przekazałem go jako załącznik. Poniższy wiersz kodu zadziałał:

outputStream.Position = 0; 
+0

Uratowałem mój dzień. Wielkie dzięki! –

+0

tyvm do dzielenia się :) +1 – Christos