Я пытаюсь сохранить строки, проходящие через этот метод, из другой электронной таблицы и сохранить эту электронную таблицу в виде вложения в электронное письмо.Письмо отправляется нормально, но вложение не открывается с ошибкой «файл поврежден и не может быть открыт».Я попытался сохранить файл в filstream на c:, но получил ту же ошибку.Что не так с этим кодом?
public static void CreateErrorMailWithExcelAttachment(List<Row> rows)
{
if (rows.Count > 0)
{
using (MemoryStream stream = new MemoryStream())
{
//Create a spreadsheet document by supplying the file name.
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook))
{
// Add a WorkbookPart to the document.
spreadsheetDocument.AddWorkbookPart();
spreadsheetDocument.WorkbookPart.Workbook = new Workbook();
spreadsheetDocument.WorkbookPart.AddNewPart<WorksheetPart>();
spreadsheetDocument.WorkbookPart.WorksheetParts.First().Worksheet = new Worksheet();
// create sheet data
spreadsheetDocument.WorkbookPart.WorksheetParts.First().Worksheet.AppendChild(new SheetData());
// Add Rows to the Sheet.
foreach (Row row in rows)
{
spreadsheetDocument.WorkbookPart.WorksheetParts.First().Worksheet.First().AppendChild(new Row(row.OuterXml));
}
spreadsheetDocument.WorkbookPart.Workbook.Save();
}
Dictionary<string, byte[]> attachments = new Dictionary<string, byte[]>();
attachments.Add("Book1.xlsx", stream.ToArray());
SendEmail
(
acsis.Common.AppContext.Configuration.GetValue(Constants.ApplicationName, "SMTPServer"),
acsis.Common.AppContext.Configuration.GetValue(Constants.ApplicationName, "SMTPUser"),
acsis.Common.AppContext.Configuration.GetValue(Constants.ApplicationName, "SMTPPass"),
"shaun.bosch@acsis.co.za",
acsis.Common.AppContext.Configuration.GetValue(Constants.ApplicationName, "InstitutionalDatabaseAdminEmail"),
"Failed rows from bulk investor spreadsheet upload",
"Test",
false,
attachments
);
}
}
}