2017-07-13 8 views
0

J'espère que vous pouvez m'aider ici. J'ai quelques problèmes avec XSSFWorkbook. Il génère le fichier sans problème mais quand j'ouvre dedans dans Excel, j'obtiens l'avertissement suivant: Excel a trouvé le contenu illisible dans 'bla bla, blah.xlsx' Dou vous voulez récupérer le contenu de ce classeur? Si vous approuvez la source de ce classeur, cliquez sur Oui. Si je clique sur oui, il ouvre le fichier sans problème. Cependant, si je l'exécute via le bloc-notes ++, juste à la fin du fichier, j'obtiens le balisage de ma page.C# XSSFWorkbook illisible Contenu

Si j'utilise HSSFWorkbook, il s'ouvre en Excel sans erreur mais je suis limité à 36k lignes. Mon exportation a plus de 300k donc je suis passé à XSSFWorkbook. Voici ma méthode pour exporter le classeur.

private void SaveXLSWorkbook(XSSFWorkbook workbook) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 

      Response.Buffer = true;    
      Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      Response.AddHeader("content-disposition","attachment;filename=ProductExport_" + _dateTime + ".xlsx"); 
      workbook.Write(ms); 
      Response.BinaryWrite(ms.ToArray()); 
     } 
    } 

Quelqu'un peut-il faire la lumière sur ce s'il vous plaît? Merci d'avance. :) - Andy

+0

Votre Excel contient-il des macros? la génération du fichier sera bien dans un tel cas et aussi il s'ouvrira avec le message warnign mais il attend le type différent de MIME "application/vnd.openxmlformats ......." en créant le dossier pour l'exportation. –

Répondre

0

J'utilise une approche similaire et ça marche. Pour l'objet Response, utilisez Clear() et End() comme dans le code ci-dessous.

using (MemoryStream ms = new MemoryStream()) 
       { 
       Response.Clear(); 
       Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       Response.AddHeader("content-disposition","attachment;filename=ProductExport_" + _dateTime + ".xlsx"); 

       workbook.Write(ms); 
       Response.BinaryWrite(ms.ToArray());     
       Response.End(); 
      }