我正在使用NPOI从模板创建excel报告,将工作簿写入MemoryStream,然后将其附加到C#中的MailMessage。我的报告生成正常,我可以看到它在调试中获得了很好的工作表。但是当我将它写入MemoryStream并尝试附加它时,Attachment对象在ContentDisposition属性下显示Size:-1。我认为将MemoryStream对象读取器位置设置为0可以解决这个问题,但没有运气。
MailMessage mm = new MailMessage("DoNotReply@testmail.com", "myself@testmail.com");
mm.Subject = "Reports for October, 2015";
mm.Body = "Attached below is the report.";
using (var memStream = new MemoryStream())
{
HSSFWorkbook closedReport = getClosedReport();
closedReport.Write(memStream);
memStream.Position = 0;
Attachment att1 = new Attachment(memStream, "ClosedReport.xls");
att1.ContentType = new System.Net.Mime.ContentType("application/vnd.ms-excel");
mm.Attachments.Add(att1);
memStream.Close();
}
我的MemoryStream对象的长度为30,720,所以我相信报告正在写入。
答案 0 :(得分:3)
在单元测试项目中使用此代码片段,我无法将ContentDisposition属性从-1更改。
然而,MemoryStream是否填充了数据,并且在memStream.Position = 0
到memStream.Seek(0, SeekOrigin.Begin);
之间切换似乎没有帮助。
我注意到memStream.Close正在清除Attachment.ContentStream属性。
尝试在关闭存储附件数据的内存流之前发送消息。