У меня возникли проблемы с добавлением документа Excel в качестве вложения в пользовательский список. Я создал обработчик событий, который собирает данные из других списков и помещает их в документ Excel.
Что я пытался сделать, чтобы исправить проблему:
- проверено CreateContentRow (index, item) в отдельном консольном приложении (работает)
- проверил, если что-то не так с получением информации из других списков (работает)
- попытка сохранения в библиотеке документов (файл сохраняется без содержимого)
- попытался открыть документ xlsx для se, если с xml что-то не так (пользовательский 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?
Когда я отлаживаю, ячейки и строки добавляются в данные листа, но они не сохраняются. Есть идеи как это исправить?