6

私はしばらくスタックオーバーフローを使用していましたが、非常に頻繁に役立ちました。今、私は自分自身でも検索しても解決できなかった問題を抱えています。phpexcelで行っていたように、openpyxlによって生成されたExcelファイルをブラウザで出力しようとしています。方法は同じようですが、壊れたファイルしか取得できません。私のコードは次のようになります。

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)

バージョン 1.5.8 と python 2.7 を使用しています。どのアプローチも機能しません。ブラウザではなくデスクトップから使用すると、問題なく動作します。助けてくれてとても感謝しています。

PS 他の言語やプログラムを使用する方が簡単だとは言わないでください。これをpythonで解決する必要があります。

4

7 に答える 7

6

これは私の仕事です。私はpython 2.7最新のものを使用しopenpyxlsend_fileフラスコから

... code ...

import StringIO
from openpyxl import Workbook
wb = Workbook()
ws = wb.active # worksheet
ws.title = "Excel Using Openpyxl"
c = ws.cell(row=5, column=5)
c.value = "Hi on 5,5"
out = StringIO.StringIO()
wb.save(out)
out.seek(0)

return send_file(out, mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
            attachment_filename='xxl.xlsx', as_attachment=True)
于 2014-10-06T10:35:11.943 に答える
3
output = HttpResponse(mimetype='application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
file_name = "Test.xlsx"
output['Content-Disposition'] = 'attachment; filename='+ file_name

wb = Workbook()

ws = wb.worksheets[0]

ws.cell('A1').value = 3.14

wb.save(output)

return output

このヒントを使用して、openpyxl でファイルをダウンロードしました。それが役立つことを願っています

于 2016-02-23T18:41:25.380 に答える
1

xlsx 出力をディスクに書き込んでから Apache 経由で提供することは完全に機能しましたが、直接出力すると Excel でエラーが発生したり、その他の問題が発生したりしました。

いくつかの手順を追加し、コードに小さな変更を 1 つ加えました。

buffer=output.getvalue()

HTTP ヘッダーで:

print "Content-Length: " + str(len(buffer))

そして、バッファを標準出力ストリームにプッシュするwrite()代わりに使用されます:print()

stdout.write(buffer)
于 2013-10-23T16:58:02.077 に答える
0

あなたのスクリプトは、変更なしで期待どおりに機能します。

cgiスクリプトの設定に問題があると思います。

スクリプトが存在するディレクトリが実際にWebサーバーによって提供されていることを確認してください。apacheでは、次の方法でこれを実現できます。

  ScriptAlias /cgi-bin/ /home/WWW/localhost/cgi-bin/

スクリプトのアクセス許可を設定して、スクリプトが実行可能であることを確認します。必要のないコマンドライン操作(python scriptname)の場合、必要のないWebブラウザーの場合。また、Webサーバーはおそらくあなたのようには実行されないため、Webサーバーの所有者がスクリプトを実行できることを確認してください。

于 2013-03-18T15:31:22.580 に答える
-6

スプレッドシートのような HTML テーブルを作成する場合は、CSV を使用することをお勧めします。Excel の代わりにこれを行うか、ビルド後に Excel を CSV に変換します。

いずれにせよ、CSV 形式のデータを取得したら、Python を使用して HTML ページを作成し、必要に応じて 、 、 タグを挿入しながら CSV データをループする<table>だけ<tr>です<td>

于 2012-09-05T23:07:47.993 に答える