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.

InformationsquelleAutor Odrade | 2010-02-16