Erreur "Impossible de lire le file" dans IE lorsque "Ouvrir" le file html avec Excel, mais pas lorsque "Enregistrer" d'abord

C'est ma première question sur ce forum, alors pardonnez les erreurs de débutants.

J'ai un code .Net, dans une application Web, qui crée une table html de manière dynamic à partir de données extraites d'une database, puis la transmet au browser Web de l'user pour qu'elle soit ouverte dans Excel. Cela fonctionne très bien dans Chrome. Il fonctionne également dans IE 11 tant que l'user, après avoir cliqué sur le lien "Télécharger", choisit l'option "Enregistrer" (save le file avant de l'ouvrir), plutôt que l'option "Ouvrir" – qui tente de lire le file en cours transmis au client. Mais dans IE 11, s'ils choisissent l'option "Ouvrir", ils obtiendront un avertissement d'Excel sur le format du file (car il s'agit d'un file html – la même chose se produit s'ils sont enregistrés en premier, ce qui est acceptable), mais Quand ils cliquent sur "Oui" pour ouvrir de toute façon, ils voient un "file Impossible de lire". Message d'erreur.

Dans un cas, j'ai pu résoudre ce problème en remplaçant les instances si "&" dans datatables avec le mot "et". Cependant, dans d'autres cas, je ne peux pas déterminer quelle valeur de données particulière pourrait causer le problème. Et encore une fois, le file s'ouvre très bien aussi longtime que l'user l'enregistre en premier. (En fait, cela fonctionne bien quand je clique sur "Ouvrir" au lieu de "Enregistrer" dans mon environnement de développement – mais pas quand je le fais depuis le server de test où le code est déployé.)

Donc, je cherche un moyen d'éliminer / replace toutes datatables problématiques affichées dans les éléments "td" de la table html, ou encore mieux encore que l'option "Open" ait le même résultat que le " Enregistrer ". Encore une fois, le contenu de la table html s'ouvre très bien aussi longtime que le file est enregistré en premier.

La table html est générée par une class C #, mais la page qui diffuse le file est dans VB.Net. Je ne pense pas que le code C # serait utile (mais je peux le postr en partie si quelqu'un pense que ce serait), mais voici le code VB dans la partie pertinente:

Response.Clear() Response.ClearContent() Response.ClearHeaders() Dim htmlTable As Ssortingng '[snip - populate htmlTable with data from database] Dim fileName As Ssortingng = "Whatever.xls" Response.Buffer = false Response.ContentType = "application/vnd.ms-excel" Response.AppendHeader("Content-Disposition", "attachment; filename=""" & fileName & """") Response.AddHeader("Content-Length", ASCIIEncoding.ASCII.GetByteCount(htmlTable).ToSsortingng()) Using ms As New MemoryStream(Encoding.ASCII.GetBytes(htmlTable)) ms.WriteTo(Response.OutputStream) Response.Flush() End Using 

MISE À JOUR: J'ai peut-être corrigé cette question en «nettoyant» datatables avec le code (C #) ci-dessous, mais je ne comprends toujours pas pourquoi le file doit être enregistré en premier, ce qui aurait rendu cela inutile. Toute réponse serait la bienvenue.

 private ssortingng GetDataRow(DataRow dr, List<DataColumnInfo> fieldInfoList) { var sb = new SsortingngBuilder("<tr valign='top' align='left'>"); // see http://stackoverflow.com/questions/4619909/format-html-table-cell-so-that-excel-formats-as-text var forceExcelText = "mso-number-format:\"\\@'\""; fieldInfoList.ForEach(c => { var content = dr[c.FieldName].ToSsortingng() .Replace("&", "and") .Replace("<", "") .Replace(">", ""); // replace all non-asccii content = Encoding.ASCII.GetSsortingng(Encoding.ASCII.GetBytes(dr[c.FieldName].ToSsortingng())); sb.Append("<td style='" + forceExcelText + "'>" + content + "</td>"); }); sb.Append("</tr>"); return sb.ToSsortingng(); } 

NOUVEAU MISE À JOUR – le code ci-dessus n'a pas résolu le problème. Vous obtenez toujours une erreur dans certains cas lorsque vous choisissez l'option "Ouvrir" au lieu de "Enregistrer" d'abord. Si je l'enregistre en premier, tout va bien.

J'ai eu le même problème et j'ai supprimé ".vnd" de la ligne ci-dessous qui a commencé à fonctionner pour moi.

 Response.ContentType = "application/ms-excel"