在共享点列表上将excel文档创建为附件

时间:2010-08-12 14:20:17

标签: c# excel sharepoint-2010 openxml eventreceiver

我在将自定义文档作为附件添加到自定义列表时遇到了一些问题。我创建了一个事件接收器,它从其他列表中收集数据并将数据放入excel文档中。

我试图纠正这个问题:

  • 在单独的控制台应用程序(工作)
  • 中测试了CreateContentRow(index,item)
  • 检查从其他列表(工作)获取信息是否有问题
  • 尝试保存到文档库(文件保存而没有内容)
  • 如果xml出现问题(没有添加自定义xml),
  • 尝试打开xlsx文档。

代码工作正常,但文档已保存但与模板完全相同,未添加任何内容。

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时,但它不会被保存。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

为了获得保存的内容,我需要添加保存语句。

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

当我在添加attachemnt之前添加上面的行时,一切正常。