2017-09-19 2 views
1

J'essaie de servir un document lorsqu'un utilisateur clique sur un bouton, mais la feuille Excel n'est pas téléchargée. Rien ne se passe, pas d'erreurs ou quoi que ce soit, je l'ai enveloppé dans un essai et attraper mais il ne donne pas d'erreurs, il obtient le Response.Flush() et Response.End() et rien ne se passe.Document non utilisé

La table utilisée pour construire la feuille excel est une donnée qui est importée de la BD.

J'utilise ClosedXML

code

DataTable table = new DataTable(); 
    table = dtResults.Copy(); 
    table.Merge(dtResultsAll); 
    table.TableName = "LookupData"; 

    using (XLWorkbook wb = new XLWorkbook()) 
    { 
     wb.Worksheets.Add(table); 

     Response.Clear(); 
     Response.Buffer = true; 
     Response.Charset = ""; 
     Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
     Response.AddHeader("content-disposition", "attchment;filename=AuditReport.xlsx"); 

     using (MemoryStream MyMemoryStream = new MemoryStream()) 
     { 
      wb.SaveAs(MyMemoryStream); 
      MyMemoryStream.WriteTo(Response.OutputStream); 
      Response.Flush(); 
      Response.End(); 
     } 
    } 
+0

Si vous comparez votre code à [l'exemple suivant] (https://github.com/closedxml/closedxml/wiki/Deliver- an-Excel-file-in-ASP.NET), vous remarquerez que votre entête est mal orthographiée: 'attchment'vs. 'attachement'. – Filburt

+0

Iv a changé cela mais il fait toujours la même chose –

+0

J'ai copié l'exemple de code lié et cela a fonctionné comme prévu. Je l'ai changé pour utiliser un DataTable similaire à votre code et cela a toujours fonctionné. Je vous recommande de retravailler votre code pour ressembler à l'exemple. – Filburt

Répondre

0

Il y a un bogue dans ClosedXML.

Descendre à 0.76.0.

Mon repro:

static void Main(string[] args) 
{ 
    DataTable table = new DataTable(); 
    table.TableName = "LookupData"; 
    XLWorkbook wb = new XLWorkbook(); 
    wb.Worksheets.Add(table); 
    // no exception with below line: 
    //wb.Worksheets.Add("table").Cell(1, 1).SetValue("Hello World"); 
    using (MemoryStream memoryStream = new MemoryStream()) 
    { 
     wb.SaveAs(memoryStream); // IndexOutOfRangeException here 
    } 
} 

Voilà mon problème: https://github.com/ClosedXML/ClosedXML/issues/493

+1

Je suis peut-être en train de cogner mais cela ne reproduit pas exactement le problème de l'OP: Il ne modifie pas les cellules après avoir ajouté un DataTable vide. L'enregistrement après l'ajout d'un DataTable rempli fonctionne comme prévu dans la version 0.89.0.0. Le PO a également déclaré qu'aucune exception n'a été levée. – Filburt

+0

Modifier une cellule n'est pas nécessaire (supprimé de la réponse). À propos des exceptions: Je pense que OP a échoué à attraper cette exception, puisqu'il y aura une exception s'il utilise la version supérieure à 0.76 – astef

+0

J'ai été capable de reproduire le problème en ajoutant un DataTable vide sans aucune colonne. – Filburt