xlwt实现动态写入Excel表格

15

我习惯使用以下方式创建电子表格:

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

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


1
Django用户:您可以保存到HTTPResponse。 - Havvy
3个回答

17

引用xlwt.save()方法文档:

也可以是一个具有写入方法的流对象,例如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。

重要更新

值得注意的是,在Python 3中,StringIOio所取代。

StringIO和cStringIO模块已经被删除。取而代之的是导入io模块,并分别使用io.StringIO或io.BytesIO来处理文本和数据。

来源

因此,请使用:

from io import StringIO
# instead of import StringIO

1
如果您想从文件对象中读取(io.read()),则需要添加io.seek(0)。 - Cliffton Fernandes

15

这是我在Django中使用的:

response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=file.xls'
book.save(response)
return response

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接