質問

カスタムリストに添付ファイルとしてExcelドキュメントを追加するのに問題があります。他のリストからデータを収集し、データをExcelドキュメントに入れるEventReceiverを作成しました。

問題を修正するために私がしようとしたこと:

  • 別のコンソールアプリケーションでcreatecontentrow(インデックス、アイテム)をテストしました(作業)
  • 他のリストから情報を取得することに何か問題があるかどうかを確認しました(作業)
  • ドキュメントライブラリに保存しようとしました(ファイルはコンテンツなしで保存されます)
  • XMLに何か問題がある場合は、XLSXドキュメントをSEに開こうとしました(カスタム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の場合に応じて、ドキュメントを保存する方法に大きな違いはありますか?

セルと列をデバッグすると、SheetDataに列が追加されますが、保存されません。これを修正する方法に関するアイデアはありますか?

役に立ちましたか?

解決

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top