.net – 使用SpreadsheetGear将电子表格作为电子邮件附件发送

客户已要求我增强其中一个应用,以便发送包含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工作簿.在此之后,Attachment对象将被推送到System.Net.Mail.MailMessage对象中

MailMessage.Attachments.Add(attachment);

我所看到的是:

>电子邮件已发送正常,并附有正确名称的附件
>但附件是空的

在开发环境中,我将一些调试代码放在那里

workbook.SaveAs("c:\\test.xls", SpreadsheetGear.FileFormat.OpenXMLWorkbook);

它产生了所需的电子表格,作为文件.但很明显,因为我最终只是通过电子方式发送,所以如果可以的话,我会尽快避免写入磁盘.关于我出错的地方的任何指示?

谢谢,
皮特

(应该最后添加升级到最新的SpreadsheetGear不是一个选项,无论是这种方法还是手动执行!环境是VS2008,.net 3.5)

最佳答案 我尝试在你的问题中使用代码.它对我有两个小修改.

1)由于您保存为OpenXMLWorkbook格式,我将扩展名更改为.xlsx而不是.xls.

2)保存workbook.SaveToStream方法后,我添加了以下代码行.

memoryStream.Seek(0, System.IO.SeekOrigin.Begin);

这会将位置设置为流的开头.当我尝试没有它的代码时,我在尝试打开Excel附件时收到错误.

没有这些修改,我得到了错误,但我从来没有得到一个空的附件.我使用的是最新版本的SSG,但我不明白为什么在这种情况下这应该是重要的.

点赞