使用pyExcelerator在Django中生成动态Excel文件,确保临时文件名唯一

3 投票
2 回答
2161 浏览
提问于 2025-04-15 16:54

我想在Django中根据请求生成一个动态的Excel文件。pyExcelerator这个库可以做到这一点,但我还没找到一种方法,可以在不生成服务器端临时Excel文件的情况下使用Excel文件的内容。我必须先生成一个临时文件,读取它的内容,然后再删除它。

问题是,pyExcelerator提取Excel文件内容的唯一方法是先保存文件,像这样:

workbook = pyExcelerator.Workbook()
workbook.save("tmp_filename")

然后再读取这个临时文件的内容。我不能使用标准库中的“tempfile”,因为它只接受文件名,而不是真正的文件。我该如何确保文件名是唯一的,并且在使用完后能够删除这个文件呢?

2 个回答

3

为什么不能使用 tempfile 模块呢?

那这样怎么样:

import tempfile
fd, filename = tempfile.mkstemp()
fd.close()
workbook.save(filename)
11

pyExcelerator这个库已经不再维护了,但有一个叫做xlwt的分支,它是被维护的,并且功能更多。比如,它可以让你把文件保存到任何像文件一样的对象里。这其中就包括可以直接保存到Django的HttpResponse里:

from django.http import HttpResponse
import xlwt

def my_view(request):
    response = HttpResponse(mimetype="application/ms-excel")
    response['Content-Disposition'] = 'attachment; filename="foo.xls"'
    wb = xlwt.Workbook()
    wb.save(response)
    return response

撰写回答