2009-01-13 4 views
10

J'ai un certain nombre de tables html générées que j'ai besoin de produire sous forme de fichier Excel. Le site est codé en ASP classique. Est-ce possible? Pourrait-il être fait en quelque sorte en utilisant les bibliothèques Open Office?Comment générer un fichier Excel * .xls à partir de l'ASP classique


EDIT: Jusqu'à présent, j'ai essayé certaines des suggestions, mais il semble échouer. Idéalement, je veux que l'utilisateur puisse cliquer sur un lien qui commencera le téléchargement d'un fichier .xls. Ce code:

<%@ Language=VBScript %> 
<% option explicit 

Response.ContentType = "application/vnd.ms-excel" 
Response.AppendHeader "content-disposition", " filename=excelTest.xls" 
%> 
<table> 
    <tr> 
     <th>Test Col 1</th> 
     <th>Test Col 2</th> 
     <th>Test Col 3</th> 
     <th colspan="2">Test Col 4</th> 
     <th>Test Col 6</th> 
     <th>Test Col 7</th> 
    </tr> 
    <tr> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
    </tr> 
</table> 

semble échouer lorsque IE7 est utilisé pour obtenir la page. IE dit qu'il "ne peut pas télécharger excelTest.asp" et que "Le site demandé est soit indisponible ou introuvable."

+0

Il ya des commentaires vers la fin de ceci: http://blogs.msdn.com/vsofficedeveloper/pages/Office-2007-Open-XML-MIME-Types.aspx – Fionnuala

+0

Les seuls commentaires que je vois sur cette page sont certains des notes supplémentaires indiquant les modifications à effectuer sur le serveur pour les types mime à prendre en charge. Voulez-vous dire que c'est la pièce qui me manque? – cdeszaq

+0

J'ai ici une question connexe, apprécier si quelqu'un pouvait jeter un oeil, http://stackoverflow.com/questions/1383366/generating-excel-file-error – George2

Répondre

18

Il est AddHeader, pas AppendHeader.

<%@ Language=VBScript %> 
<% Option Explicit 

Response.ContentType = "application/vnd.ms-excel" 
Response.AddHeader "Content-Disposition", "attachment; filename=excelTest.xls" 
%> 
<table> 
    <tr> 
     <td>Test</td> 
    </tr> 
</table> 

Mise à jour: J'ai écrit un billet de blog sur la façon de generate Excel files in ASP Classic. Il contient un morceau de code plutôt utile pour générer des fichiers xls et csv.

+0

Cela fonctionne comme un charme! Je vous remercie! – cdeszaq

+0

J'ai une question connexe ici, apprécie si quelqu'un pouvait jeter un oeil, http://stackoverflow.com/questions/1383366/generating-excel-file-error – George2

+0

Merci, Kristof Neirynck !! Cela m'a aidé à comprendre comment obtenir IE pour reconnaître le fichier Excel en téléchargement. – ckpepper02

0

Vous pouvez toujours exporter le tableau HTML vers un document XLS. Excel fait du bon travail pour comprendre les tableaux HTML.

Une autre possiblitly est d'exporter les tables HTML en tant que fichier CSV ou TSV, mais vous devrez configurer la mise en forme dans votre code. Ce n'est pas trop difficile à accomplir.

Il existe des classes dans Microsoft.Office.Interop qui vous permettent de créer un fichier Excel par programmation, mais je les ai toujours trouvées un peu maladroites. Vous pouvez trouver une version .NET de creating a spreadsheet here, qui devrait être assez facile à modifier pour ASP classique.

Comme pour .NET, j'ai toujours aimé CarlosAG's Excel XML Writer Library. Il a un bon générateur de sorte que vous pouvez configurer votre fichier Excel, l'enregistrer comme une feuille de calcul XML et il génère le code pour faire tout le formatage et tout. Je sais que ce n'est pas ASP traditionnel, mais je pensais que je le lancerais là-bas.


Avec ce que vous essayez ci-dessus, essayez d'ajouter l'en-tête:

"Content-Disposition", "attachment; filename=excelTest.xls" 

Voir si cela fonctionne. De plus, je l'utilise toujours pour le type de contenu:

Response.ContentType = "application/octet-stream" 
    Response.ContentType = "application/vnd.ms-excel" 
+0

VBScript renvoie une erreur: objet ne prend pas en charge cette propriété ou méthode: 'Response.AppendHeader' – cdeszaq

0

Il y a un truc "pas cher et sale que je l'ai utilisé ... Chut ne dites à personne. Si vous produisez un texte délimité par des tabulations et que vous créez le nom de fichier * .xls, Excel l'ouvre sans objection, question ou avertissement. Il suffit donc de lancer les données dans un fichier texte avec délimitation d'onglet et vous pouvez l'ouvrir avec Excel ou Open Office.

+1

En fait, Excel 2007 affichera une boîte de dialogue d'avertissement si un fichier est au format TSV, mais son extension lit .xls Je ne connais aucun moyen d'éviter cela. –

+0

faire le fichier texte CSV mais lui donner une extension .csv. Excel l'ouvrira sans message. – Tester101

+1

Deux problèmes potentiels: (1) Microsoft Excel coupera les espaces et les zéros de début; et (2) Microsoft Excel 2010 présentera un avertissement lors de l'ouverture du fichier. # 1 peut être résolu en enveloppant le texte avec = "{cell-data}" (via: http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm#CSVAndExcel) – iokevins

0

J'ai eu le même problème jusqu'à ce que j'ai ajouté Response.Buffer = False. Essayez de changer le code à la suivante.

Response.Buffer = False Response.ContentType = "application/vnd.ms-Excel" Response.AddHeader "Content-Disposition", "pièce jointe; filename = excelTest.xls"

Le seul problème J'ai maintenant est que lorsque Excel ouvre le fichier, je reçois le message suivant.

Le fichier que vous essayez d'ouvrir, 'NomFichier [1] .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 fiable avant d'ouvrir le fichier. Voulez-vous ouvrir le fichier maintenant? Lorsque vous ouvrez le fichier, les données apparaissent toutes dans des colonnes séparées, mais la feuille de calcul est entièrement blanche, sans bordures entre les cellules.

Espérons que ça aide.

Questions connexes