web-dev-qa-db-fra.com

Pourquoi afficher un message d'erreur lors de l'ouverture du fichier .xls

Dans mon application asp.net, C #, nous générons et téléchargeons le fichier .xls. Mais quand j'essaye d'ouvrir, ça donne un message

"Le fichier que vous essayez d'ouvrir," nomfichier.xls ", est dans un format différent de celui spécifié par l'extension de fichier. Vérifiez que le fichier n'est pas corrompu et provient d'une source approuvée avant de l'ouvrir. Voulez-vous l'ouvrir? le dossier maintenant? "

Si j'appuie sur «Oui», c'est l'ouverture. J'ai changé l'extension de fichier en .xlsx, toujours le même message. Quelqu'un peut-il me dire pourquoi cela se produit? J'ai ajouté l'extension de type .xlsx MIME dans IIS manager avec le type MIME comme application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. Cela montre toujours le même message. S'il vous plaît suggérer comment puis-je m'en débarrasser.

9
Sukanya

Créez-vous complètement le fichier xls ou copiez-vous et remplissez-vous un fichier de modèle xls? Un fichier de modèle de format incorrect peut être à l'origine du problème.

De plus, quel fournisseur utilisez-vous pour remplir votre fichier? - Microsoft.ACE.OLEDB.12.0 pour xlsx/xlsm? - Microsoft.Jet.OLEDB.4.0 pour xls?

Une combinaison fournisseur/poste incorrecte peut être à l'origine du problème.

Selon votre commentaire, voici une partie du code où j’ai fait cela par le passé: (commenté certaines des lignes car je ne me souviens pas pourquoi elles étaient utiles)

Response.Clear();                           
Response.ContentType = "application/vnd.ms-Excel";
//Response.ContentEncoding = Encoding.Default; 
//Response.Charset=""; 
Response.AddHeader("Content-Disposition: ",
    String.Format(@"attachment; filename={0}",myfileName));

//EnableViewState = false; 

Response.Write(myFileContentAsString); 
Response.Flush();
Response.Close();
2
jbl

Celui-ci est peut-être un ancien post, mais j'ai cherché des réponses au même problème et je pensais que cela pourrait être utile. Il semble que cela ne soit pas lié à la manière dont votre application donne le fichier xls au navigateur. C'est un problème d'excès de sécurité dans Office 2007.

Microsoft Article de la base de connaissances 948615 l'explique:

Lorsque vous ouvrez un fichier dans Excel 2007, vous recevez un avertissement indiquant que le format du fichier diffère de celui spécifié par l'extension de nom de fichier.

La seule solution consiste à ajouter une entrée au registre du client. Je sais que ce n'est pas une vraie solution pour une application Web avec peut-être des centaines d'utilisateurs, mais au moins vous pouvez ajouter une note à la page expliquant comment résoudre cet avertissement gênant.

3
Adrian Platte

L'alerte est une nouvelle fonctionnalité de sécurité dans Excel 2007 appelée Extension Hardening, qui garantit que le contenu du fichier ouvert correspond au type d'extension spécifié dans la commande Shell qui tente d'ouvrir le fichier. La conception actuelle ne vous permet pas d'ouvrir le contenu HTML d'un site Web dans Excel à moins que l'extension de l'URL ne porte l'extension .HTM/.HTML/.MHT/.MHTML. Ainsi, ASP pages qui renvoient du HTML et définissent le type MIME sur quelque chose comme XLS pour tenter de forcer le HTML à s'ouvrir dans Excel au lieu du navigateur Web (comme prévu) obtiendront toujours l'alerte de sécurité, car le contenu ne correspond pas au type MIME.

http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/03/11/Excel-2007-extension-warning.aspx

1
Tipper

Vous ne savez pas comment vous exportez des données vers Excel. Définir les DisplayAlerts sur false peut aider.

xlApp = new Excel.Application();
xlApp.DisplayAlerts = false;

J'utilise interop DLL. L'espace de nom serait Microsoft.Office.Interop.Excel. Voir la réponse de Feng Chen au lien suivant pour savoir comment ajouter la référence: http://social.msdn.Microsoft.com/Forums/en/netfxsetup/thread/c9e83756-4ae2-4ed4-b154-1537f3bb3a22

Le lien suivant pourrait aussi aider:

http://www.dotnetperls.com/Excel

1
Manoj

L'extension de fichier .xls (version 2003) prend en charge la présentation HTML, mais Office 2007 et les versions ultérieures ne la prennent pas en charge.

Vous devez exporter le fichier Excel au format .xlsx . D'après mon expérience, il sera ensuite pris en charge dans toutes les versions.

Ajouter les DLL ci-dessous dans le dossier bin

  • ClosedXML.dll
  • DocumentFormat.OpenXml.dll

Code pour exporter le fichier au format .xlsx

    DataTable dt = new DataTable(); 
    //Create column and inser rows
    using (XLWorkbook wb = new XLWorkbook())
    {           
                var ws = wb.Worksheets.Add(dt, Sheetname); 
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.Charset = "";
                HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + p_FileName + ".xlsx");
                using (MemoryStream MyMemoryStream = new MemoryStream())
                {
                    wb.SaveAs(MyMemoryStream);
                    MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream);
                    HttpContext.Current.Response.Flush();
                    HttpContext.Current.Response.End();
                }
     }
0
Jitendra G2

Vous utilisez .xls dans le nom de fichier et .xlsx dans le type MIME. Essayez avec filename.xlsx.

0
Mujtaba Hassan