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 ?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top