Criando documento do Excel como anexo em uma lista do SharePoint
-
28-09-2019 - |
Pergunta
Tenho alguns problemas para adicionar um documento do Excel como anexo em uma lista personalizada. Fiz um EventReceiver que coleta dados de outras listas e coloca os dados em um documento do Excel.
O que eu tentei fazer para corrigir o problema:
- CreateContentrow testado (índice, item) em um aplicativo de console separado (obras)
- Verifiquei se há algo errado em buscar informações de outras listas (obras)
- Tentei salvar em uma biblioteca de documentos (o arquivo é salvo sem conteúdo)
- Tentei abrir o documento XLSX para SE, se houver algo errado com o XML (nenhum XML personalizado adicionado).
O código funciona muito bem, mas o documento é salvo, mas é idêntico ao modelo, sem conteúdo adicionado.
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();
}
}
Estou usando a mesma abordagem em outra lista em que gero documentos .docx lá, funciona muito bem. Existe uma grande diferença na maneira como devo salvar o documento, dependendo se o .xlsx ou .docx?
Quando depuro as células e linhas, são adicionadas aos dados do Sheet, mas não são salvos. Alguma ideia de como consertar isso ?
Solução
Para obter o conteúdo salvo, eu precisava adicionar instruções de salvamento.
wspart.Worksheet.Save();
document.WorkbookPart.Workbook.Save();
Quando adicionei as linhas acima antes de adicionar o anexo, tudo funcionou como deveria.