wie die Ausgabe xlsx erzeugt durch Openpyxl browser?
War ich mit stackoverflow für eine Weile jetzt, und es half mir sehr oft. Nun habe ich ein problem konnte ich nicht lösen mich oder über die Suche.
Ich versuche, die Ausgabe meines excel-Datei generiert openpyxl im browser, wie ich es Tat mit phpexcel. Die Methode scheint das gleiche zu sein, aber ich bekomme nur defekte Datei. Mein code sieht wie folgt aus:
from openpyxl.workbook import Workbook
from openpyxl.writer.excel import ExcelWriter
from openpyxl.writer.excel import save_virtual_workbook
from openpyxl.cell import get_column_letter
from StringIO import StringIO
print 'Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
print 'Content-Disposition: attachment;filename="results.xlsx"'
print 'Cache-Control: max-age=0\n'
output = StringIO()
wb = Workbook()
ws = wb.worksheets[0]
ws.cell('A1').value = 3.14
wb.save(output)
print output.getvalue()
#print save_virtual_workbook(wb)
Ich verwende die version 1.5.8 und python 2.7.
Keiner der Ansätze funktioniert. Wenn ich nur benutzen Sie es vom desktop und nicht browser funktioniert es einwandfrei.
Ich wäre sehr dankbar für Hilfe.
P. S. bitte Sag mir nicht, dass die Verwendung anderer Sprache oder Programm wäre einfacher. Ich brauche, um dieses Problem zu lösen mit python.
- Von dieser Frage, ich nehme an, Sie haben keine Erfahrungen über web-Programmierung mit python. Sie können nicht einen in diesem code in eine *.py in Ihrem Dokument-root und erwarten, dass es läuft wie ein *.php.
- Inhalt -* - Header falsch Aussehen. Sie sollten die Verwendung von CR/LF-Zeilenenden. Können Sie eine einfache
text/html
Probe diente korrekt, die von diesem Skript? Wenn Nein, korrigieren Sie zuerst. - Ich habe genug Erfahrung, um zu wissen, zur Ausführung von cgi-bin. Ich habe andere Skripte. Dies ist der erste nicht ausgeben, was ich brauche. Ja sauber text/html funktioniert perfekt, zumindest soweit ich getestet habe. Ich sehe nicht, warum sollte ich verwenden CR/LF...
- er ist die Einstellung der MIME-Typ der Datei will er dienen, das ist richtig, wenn auch weitgehend irrelevant hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
dies ist für mich arbeiten. Ich benutze
python 2.7
und neuesteopenpyxl
undsend_file
von Kolbenfrom io import BytesIO
ist die Art und Weise, dies zu tun.Habe ich diese Tipps zu download meine Dateien mit openpyxl. Hoffe, dass hilft
Schreiben Sie die xlsx-Ausgabe auf Platte und servieren Sie es über Apache funktionierte perfekt, sondern setzen es direkt verursacht Fehler in Excel-und andere Fragen.
Habe ich ein paar zusätzliche Schritte und machte eine kleine änderung an Ihrem code:
In den HTTP-Headern:
Und verwendet
write()
stattprint()
schieben Sie den Puffer in die standard-Ausgabe-stream:Content-Length
header. Ich könnte nicht ankommen dieses zu wirken ohne es zu sein. Wenn ichprint save_virtual_workbook(wb)
meine daraus resultierende Zip-Datei hatte zwei zusätzliche bytes. Wenn ichstdout.write()
Sie hatten einen extra-byte. Die BereitstellungContent-Length
es behoben.Ihre Skripts funktioniert bei mir wie erwartet ohne änderungen.
Kann ich nur davon ausgehen, dass Sie ein problem mit Ihrem cgi-Skript setup.
Stellen Sie sicher, dass das Verzeichnis, wo das Skript lebt tatsächlich bekommt vom web-server bereitgestellt. Auf der Basis von apache können Sie erreichen dies mit:
Stellen Sie sicher, dass das Skript ausführbaren durch festlegen der skriptberechtigungen. Für Kommandozeilen-Betrieb (
python scriptname
), dass es nicht notwendig war, für Ihren webbrowser, das ist. Und stellen Sie sicher, dass der Besitzer des Webservers kann excute die Skripte, da der webserver wohl nicht ausgeführt wird, wie Sie.Da Excel verwendet ein binäres format, das Sie verwenden sollten BytesIO zu Puffern.
from io import BytesIO
Aber welche Fehler sind Sie immer, wenn Sie
save_virtual_workbook()
was bedeutet dies für Sie?Wenn Sie möchten, erstellen Sie eine HTML-Tabelle, die so aussieht wie Ihre Tabelle, die Sie wahrscheinlich wollen, um die Arbeit mit CSV. Entweder tun Sie dies, anstelle von Excel, ODER konvertieren Sie Ihre Excel-CSV-nach dem Sie es erstellen.
In jedem Fall, wenn Sie die Daten im CSV-format, dann ist es einfach eine Frage der Verwendung von python zum erstellen der HTML-Seite und die Schleife durch die CSV-Daten, während Sie Ihre
<table>
,<tr>
, und<td>
tags, als angemessen.