クライアントから、Excelスプレッドシートを含むメールを送信するために、アプリの1つを拡張するように依頼されました。たまたま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");
}
ここで、ワークブックは完全に入力されたSpreadsheetGearワークブックです。System.Net.Mail.MailMessage
この後、Attachmentオブジェクトはを使用してオブジェクトにプッシュされます
MailMessage.Attachments.Add(attachment);
私が見ているのは:
- メールは正常に送信され、正しい名前が添付されています
- ただし、添付ファイルは空です
開発環境では、いくつかのデバッグコードを行に沿って配置します
workbook.SaveAs("c:\\test.xls", SpreadsheetGear.FileFormat.OpenXMLWorkbook);
これにより、目的のスプレッドシートがファイルとして生成されました。しかし、明らかに私はこれを最終的に電子的に送信しているだけなので、可能であれば、ディスクへの書き込みはまったく避けたいと思います。私がどこを間違えたのかについての指針はありますか?
ありがとう、ピート
(最後に、最新のSpreadsheetGearへのアップグレードはオプションではなく、このアプローチまたは手動で行うことを追加する必要があります!環境はVS2008、.net 3.5です)