2016-12-31 1 views
3

Je reçois le message «Impossible d'accéder à un flux fermé» lorsque j'essaie d'enregistrer un classeur ClosedXML (XLWorkbook) dans un flux de mémoire.ClosedXml Impossible d'accéder à un flux fermé

public byte[] GetStream() 
    { 
     using (var stream = new MemoryStream()) 
     { 
      Workbook.SaveAs(stream); 

      return stream.ToArray(); 
     } 
    } 

Pour autant que je peux comprendre qu'il ya un problème au sein de la bibliothèque ClosedXml puisque le flux a été créé juste avant d'accéder à la méthode de sauvegarde.

+0

Comment avez-vous créé ce classeur? De fichier ou d'un flux ou créé à partir de zéro? – rene

+0

Je le crée à partir d'un flux (fichier modèle Excel). J'ai essayé d'en créer un à partir de zéro et il génère un fichier Excel malformaté. – Andrew

+0

Si elle est créée à partir d'un flux, j'attends que votre code prenne [ceci d'autre] (https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Excel/XLWorkbook.cs#L553) ce qui me fait croire le flux original devrait être disponible, comme dans, non disposé. – rene

Répondre

2

Cela dépend de la façon dont vous avez créé votre classeur. S'il a été créé à partir d'un flux, il accède à ce flux d'origine pendant l'opération save. Par conséquent, l'exception n'est pas due à la mémoire que vous avez fournie dans la méthode de sauvegarde, c'est le flux d'origine qui est le coupable. Assurez-vous de conserver ce flux jusqu'à ce que toutes les opérations que vous souhaitez effectuer dans le classeur soient terminées.

+0

En effet, disposer du Stream original semblait être le problème puisque le Workbook garde une référence au [stream original] (https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Excel/XLWorkbook.cs#L711) . – Andrew