カスタムリストの添付ファイルとしてExcelドキュメントを追加する際に問題が発生しました。他のリストからデータを収集し、そのデータをExcelドキュメントに入れるイベントレシーバーを作成しました。
問題を修正するために私がやろうとしたこと:
- 別のコンソールアプリケーションでCreateContentRow(index、item)をテストしました(動作します)
- 他のリストからの情報の取得に問題がないか確認しました(動作)
- ドキュメントライブラリに保存しようとしました(ファイルはコンテンツなしで保存されます)
- xmlに問題があるかどうかを確認するためにxlsxドキュメントを開こうとしました(カスタムxmlは追加されていません)。
コードは問題なく機能しますが、ドキュメントは保存されますが、テンプレートと同じであり、コンテンツは追加されていません。
using (var memory = new MemoryStream())
{
var binary = template.OpenBinary();
memory.Write(binary, 0, binary.Length);
using (var document = SpreadsheetDocument.Open(memory, true))
{
var workbookPart = document.WorkbookPart;
var worksheetparts = workbookPart.WorksheetParts;
var worksheetpart = worksheetparts.FirstOrDefault();
var sheetData = worksheetpart.Worksheet.GetFirstChild<SheetData>();
var index = 2;
foreach (var item in items)
{
var row = CreateContentRow(index, item);
index++;
sheetData.AppendChild(row);
}
properties.ListItem.Attachments.Add("name" + string.Format("{0:yyyy-MM-dd_HHmmss}", DateTime.Now) + ".xlsx", memory.ToArray());
properties.ListItem.Update();
}
}
私は別のリストで同じアプローチを使用しており、そこで.docxドキュメントを生成します。それは問題なく機能します。.xlsxまたは.docxのどちらであるかによって、ドキュメントの保存方法に大きな違いはありますか?
デバッグすると、セルと行がシートデータに追加されますが、保存されません。これを修正する方法についてのアイデアはありますか?