0

カスタムリストの添付ファイルとして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のどちらであるかによって、ドキュメントの保存方法に大きな違いはありますか?

デバッグすると、セルと行がシートデータに追加されますが、保存されません。これを修正する方法についてのアイデアはありますか?

4

1 に答える 1

0

コンテンツを保存するには、saveステートメントを追加する必要がありました。

wspart.Worksheet.Save();
document.WorkbookPart.Workbook.Save();

attachemntを追加する前に上記の行を追加すると、すべてが正常に機能しました。

于 2010-08-13T10:23:00.413 に答える