Question

J'ai des difficultés à ajouter un document Excel en pièce jointe sur une liste personnalisée. Je l'ai fait une eventreceiver qui recueille des données provenant d'autres listes et met les données dans un document Excel.

Ce que j'ai essayé de faire pour corriger le problème:

  • testé CreateContentRow (index, point) dans une application console séparée (travaux)
  • vérifié s'il y a quelque chose de mal à aller chercher des informations provenant d'autres listes (travaux)
  • essayé l'enregistrement dans une bibliothèque de documents (le fichier est enregistré sans contenu)
  • a essayé d'ouvrir le document xlsx à se s'il y a quelque chose de mal avec le xml (pas xml personnalisé ajouté).

Le code fonctionne très bien, mais le document est enregistré, mais il est identique au modèle, aucun contenu ajouté.

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();
                    }
                }

J'utilise la même approche sur une autre liste où je produis des documents .docx là, il fonctionne très bien. Y at-il une grande différence dans la façon dont je dois enregistrer le document en fonction de si son .xlsx ou .docx?

Quand je déboguer les cellules et les lignes sont ajoutées à la sheetdata, mais il ne soit pas sauvé. Toutes les idées sur la façon de résoudre ce problème?

Était-ce utile?

La solution

Pour obtenir le contenu enregistré i besoin d'ajouter des déclarations de sauvegarde.

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

Quand j'ai ajouté les lignes ci-dessus avant d'ajouter le tout attachemnt travaillé comme il se doit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top