2013-03-26 25 views
7

Tôi đang sử dụng để tạo ra một bảng tính theo cách sau:xlwt viết xuất sắc tấm on the fly

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

Có cách nào để không lưu vào tập tin vào một filepath, và thay vào đó viết nó trên đồng ruộng chuyển đến người dùng tải tệp xuống? Hoặc tôi có cần phải lưu nó như là một tập tin tmp và sau đó phục vụ đó cho người sử dụng?

+0

người dùng Django: Bạn có thể lưu vào một HttpResponse. – Havvy

Trả lời

13

Để báo the documentation for the .save() method of xlwt:

Nó cũng có thể là một đối tượng dòng với một phương pháp ghi, chẳng hạn như một StringIO, trong trường hợp dữ liệu cho file excel được ghi vào dòng .

Modified dụ:

import StringIO 

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

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

wbk.save(f) # write to stdout 

Một số có thể đề nghị bạn sử dụng cStringIO thay vì StringIO, nhưng được cảnh báo trước rằng cStringIO khi cuối cùng tôi đã kiểm tra không xử lý đúng cách Unicode.

Có lẽ cũng đáng lưu ý rằng StringIO được thay thế bằng Python 3 bởi io.

+0

Bạn cần thêm io.seek (0) nếu bạn muốn đọc (io.read()) từ tệp như đối tượng. –

7

đây là những gì tôi sử dụng trong 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() 
Các vấn đề liên quan