15

我习惯于通过以下方式创建电子表格:

    wbk = xlwt.Workbook()
    earnings_tab = wbk.add_sheet('EARNINGS')
    wbk.save(filepath)

有没有办法不将文件保存到文件路径,而是即时将其写入下载文件的用户?还是我需要将其保存为 tmp 文件,然后将其提供给用户?

4

3 回答 3

17

引用以下方法的文档.save()xlwt

它也可以是带有 write 方法的流对象,例如 a StringIO,在这种情况下,excel 文件的数据将写入流中。

修改示例:

from io import StringIO  # instead of Python 2.x `import StringIO`

f = StringIO() # create a file-like object 

wbk = xlwt.Workbook()
earnings_tab = wbk.add_sheet('EARNINGS')

wbk.save(f) # write to stdout

有些人可能会建议您使用cStringIO而不是StringIO,但请注意,cStringIO上次我检查时没有正确处理 Unicode。

重要更新

可能还值得注意的是,StringIO在 Python 3 中它被替换为io.

StringIO 和 cStringIO 模块不见了。相反,导入 io 模块并分别对文本和数据使用 io.StringIO 或 io.BytesIO 。

资源

所以使用:

from io import StringIO
# instead of import StringIO
于 2013-03-26T23:13:17.413 回答
15

这是我在 Django 中使用的:

response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=file.xls'
book.save(response)
return response
于 2015-06-15T12:59:27.983 回答
0
class QueryToExcel(object):
def __init__(self, doc_name = 'doc_name'):
    #some set up stuff
    self.b_io = BytesIO()
    self.workbook = pd.ExcelWriter(self.b_io, engine='xlsxwriter')
    self.run() #fill in workbook with pandas dataframes
    self.workbook.save()

def get_workbook(self):
    return self.b_io.getvalue()


app = Flask(__name__)
app.debug = True 
@app.route('/pvh/', methods = ['GET'])
def get_workbook(self):
    return self.b_io.getvalue()
于 2016-03-28T18:42:13.823 回答