2009-01-13 1 views
10

Ich habe eine Reihe von generierten HTML-Tabellen, die ich zur Ausgabe als Excel-Datei benötigen. Die Seite ist in klassischem ASP kodiert. Ist das möglich? Könnte es gemacht werden, indem man irgendwie die Open-Office-Bibliotheken benutzt?Wie zur Ausgabe ein Excel * .xls-Datei von den klassischen ASP


EDIT: Bisher habe ich einige der Vorschläge versucht, aber es scheint zu scheitern. Im Idealfall möchte ich, dass der Benutzer auf einen Link klicken kann, der den Download einer .xls-Datei startet. Dieser 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> 

scheint zu versagen, wenn IE7 verwendet wird, um die Seite zu erhalten. IE sagt, dass es "ExcelTest.asp nicht herunterladen kann" und dass "die angeforderte Site entweder nicht verfügbar ist oder nicht gefunden werden kann".

+0

Es gibt Kommentare gegen Ende dieser: http://blogs.msdn.com/vsofficedeveloper/pages/Office-2007-Open-XML-MIME-Types.aspx – Fionnuala

+0

Die einzigen Kommentare, die ich auf dieser Seite sehe, sind einige zusätzliche Notizen, die die Änderungen angeben, die auf dem Server für die zu unterstützenden Mime-Typen durchgeführt werden müssen. Sagst du, dass dies das Stück ist, das ich vermisse? – cdeszaq

+0

Ich habe eine ähnliche Frage hier, schätzen, wenn jemand einen Blick darauf werfen kann, http://stackoverflow.com/questions/1383366/generating-excel-file-error – George2

Antwort

18

Es ist AddHeader, nicht 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> 

Update: ich einen Blog-Post über, wie man generate Excel files in ASP Classic geschrieben habe. Es enthält einen ziemlich nützlichen Code, um sowohl xls als auch csv Dateien zu generieren.

+0

Das funktioniert wie ein Zauber! Danke! – cdeszaq

+0

Ich habe eine verwandte Frage hier, zu schätzen, wenn jemand einen Blick werfen könnte, http://stackoverflow.com/questions/1383366/generating-excel-file-error – George2

+0

Danke, Kristof Neirynck !! Dies half mir herauszufinden, wie IE die Excel-Datei als Download erkennen kann. – ckpepper02

0

können Sie immer exportieren nur die HTML-Tabelle in ein XLS-Dokument. Excel kann HTML-Tabellen sehr gut verstehen.

Eine weitere Möglichkeit besteht darin, die HTML-Tabellen als CSV- oder TSV-Datei zu exportieren, aber Sie müssen die Formatierung in Ihrem Code einrichten. Dies ist nicht zu schwierig zu erreichen.

Es gibt einige Klassen in Microsoft.Office.Interop, mit denen Sie eine Excel-Datei programmatisch erstellen können, aber ich fand sie immer etwas unbeholfen. Sie können eine .NET-Version von creating a spreadsheet here finden, die für den klassischen ASP ziemlich einfach zu ändern sein sollte.

Wie für .NET, ich mochte immer CarlosAG's Excel XML Writer Library. Es hat einen schönen Generator, so dass Sie Ihre Excel-Datei einrichten können, speichern Sie es als XML-Tabelle und es generiert den Code, um alle Formatierungen und alles zu tun. Ich weiß, es ist kein klassisches ASP, aber ich dachte, dass ich es da rausschmeißen würde.


Mit dem, was Sie oben versuchen, versuchen, die Header hinzufügen:

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

sehen, ob das funktioniert. Auch ich benutze diese für den Inhaltstyp immer:

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

VBScript einen Fehler wirft: Objekt nicht unterstützt Diese Eigenschaft oder Methode: 'Response.AppendHeader' – cdeszaq

0

Es gibt einen ‚billig und schmutzig‘ Trick, den ich verwendet habe ... pssst nicht weitersagen. Wenn Sie tabulatorgetrennten Text ausgeben und den Dateinamen * .xls eingeben, öffnet Excel das Dokument ohne Einwände, Fragen oder Warnungen. Also einfach die Daten in eine Textdatei mit Tabulatorabgrenzung umwandeln und Sie können sie mit Excel oder Open Office öffnen.

+1

Eigentlich erscheint in Excel 2007 ein Warndialog, wenn eine Datei im TSV-Format vorliegt, aber ihre Erweiterung lautet .xls Ich weiß auch nicht, wie ich das vermeiden kann. –

+0

machen Sie die Textdatei CSV, aber geben Sie ihr eine .csv-Erweiterung. Excel wird es ohne Nachricht öffnen. – Tester101

+1

Zwei mögliche Probleme: (1) Microsoft Excel wird führende Leerzeichen und Nullen trimmen; und (2) Microsoft Excel 2010 wird beim Öffnen der Datei eine Warnung ausgeben. # 1 kann gelöst werden, indem man Text mit = "{cell-data}" umhüllt (via: http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm#CSVAndExcel) – iokevins

0

Ich hatte das gleiche Problem, bis ich Response.Buffer = False hinzugefügt. Versuchen Sie den folgenden Code zu ändern.

Response.Buffer = False Response.ContentType = "application/vnd.ms-excel" Response.AddHeader "Content-Disposition", "attachment; filename = excelTest.xls"

Das einzige Problem, das ich Jetzt habe ich, wenn Excel die Datei öffnet, die folgende Nachricht.

Die Datei, die Sie öffnen möchten, 'FileName [1] .xls', hat ein anderes Format als in der Dateierweiterung angegeben. Stellen Sie vor dem Öffnen der Datei sicher, dass die Datei nicht beschädigt ist und von einer vertrauenswürdigen Quelle stammt. Möchten Sie die Datei jetzt öffnen?

Wenn Sie die Datei öffnen, werden die Daten alle in separaten Spalten angezeigt, aber die Tabelle ist weiß, keine Rahmen zwischen den Zellen.

Hoffe, dass hilft.

Verwandte Themen