一位客户要求我增强他们的一个应用程序,以便发送一封包含 Excel 电子表格的电子邮件。他们碰巧有一本 SpreadsheetGear (2009) 的旧副本,所以我认为如果我使用它可能会节省时间。
碰巧的是,SpreadsheetGear 非常适合实际创建电子表格,但我无法将其作为电子邮件附件发送。只是想知道是否有人这样做过?理论上应该很简单,我目前的代码如下:
/// <summary>
/// Creates an email attachment based upon the inbound workbook
/// </summary>
/// <param name="workbook">The workbook</param>
/// <returns>an email Attachment</returns>
private static Attachment CreateAttachment(string id, IWorkbook workbook)
{
// Open up a memorystream and save out to it
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
workbook.SaveToStream(memoryStream, SpreadsheetGear.FileFormat.OpenXMLWorkbook);
return new Attachment(memoryStream, id + ".xls", "application/vnd.ms-excel");
}
其中 workbook 是一个完全填充的 SpreadsheetGear 工作簿。在此之后,附件对象被推入一个System.Net.Mail.MailMessage
对象使用
MailMessage.Attachments.Add(attachment);
我看到的是:
- 电子邮件发送正常,并附有正确名称的附件
- 但是附件是空的
在开发环境中,我在其中放置了一些调试代码
workbook.SaveAs("c:\\test.xls", SpreadsheetGear.FileFormat.OpenXMLWorkbook);
它产生了所需的电子表格,作为一个文件。但很明显,因为我最终只是以电子方式发送这个,如果可以的话,我会尽快避免写入磁盘。关于我哪里出错的任何指示?
谢谢,皮特
(最后应该补充一点,升级到最新的SpreadsheetGear不是一种选择,它要么是这种方法,要么是手动完成!环境是VS2008,.net 3.5)