Le téléchargement .xlsx fichier à l'aide de la Réponse.TransmitFile()
Je suis en train de travailler sur un code qui génère une feuille de calcul Excel côté serveur et télécharge ensuite à l'utilisateur. Je suis en utilisant ExcelPackage pour générer le fichier.
La génération fonctionne correctement. Je peux ouvrir les fichiers générés à l'aide d'Excel 2007 avec pas de problèmes. Mais, je vais avoir de la difficulté à télécharger le fichier avec Response.TransmitFile()
.
Droit maintenant, j'ai le code suivant:
//Generate the file using ExcelPackage
string fileName = generateExcelFile(dataList, "MyReportData");
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.ContentType = "application/vnd.xls"
Response.Charset = "";
Response.TransmitFile(fileName);
Lorsque Excel 2007 ouvre le fichier téléchargé comme ci-dessus, il donne le "format de fichier ne correspond pas à l'extension d'avertissement". Après avoir cliqué sur le passé de l'avertissement, Excel affiche le contenu xml brut du fichier.
Si je change l'extension du fichier, comme
Response.AddHeader("content-disposition", "attachment;filename=FileName.xlsx");
Excel 2007 donne une "Excel a trouvé du contenu illisible dans le fichier" erreur, suivi par une boîte de dialogue qui vous propose de trouver un convertisseur sur le web. Si je clique sur "non" sur cette boîte de dialogue, Excel est en mesure de charger les données.
J'ai également expérimenté avec différents types MIME, comme application/vnd.ms-excel
et application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
, combiné avec les extensions de fichier de .xls et .xlsx. Toutes les combinaisons résultat dans l'un des deux comportements mentionnés ci-dessus.
Quelle est la bonne combinaison de l'extension de fichier et le type MIME à utiliser dans ce scénario? Quoi d'autre pourrait l'origine de cet échec, autre qu'un mauvais type MIME ou d'extension?
Pour info, ce qui se passe avec Visual Studio intégré du serveur web de développement. Je n'ai pas encore essayé cela avec IIS.
Vous devez vous connecter pour publier un commentaire.
Je ne peux certainement dire qu'il n'y a rien de mal avec votre approche, mais je vais partager quelques observations de faire quelque chose de similaire.
Les en-têtes sont Pascal Cas, la plupart des navigateurs ne se soucient pas, mais je voudrais changer votre contenu-disposition de Contenu-Disposition. Changer le jeu de caractères ne devrait pas être nécessaire ou pertinent. Votre type de contenu doit être fine, je tiens seulement à l'utilisation de l'application/vnd.openxmlformats-officedocument.spreadsheetml.fiche de et .xlsx si c'est effectivement le contenu du fichier, sinon le bâton avec application/vnd.ms-excel et .xls.
Une autre chose que vous devriez considérer est d'envoyer le navigateur de la Longueur du Contenu:
Aussi avez-vous essayé avec plusieurs navigateurs? Je me demandais si c'est un vendeur-problème spécifique.
Un ultime effort, vous pouvez définir votre Type de Contenu application/octet-stream, et n'importe quel navigateur devrait vous proposons de le télécharger, et alors que la plupart des navigateurs vous permettent de l'ouvrir après l'avoir téléchargé basée sur l'extension.
utiliser cette
dans votre code est
Essayez comme ceci