2016-03-14 94 views
1

我想在Django網站上生成一個excel文件,所以我搜索了它,看看this example。我只寫了一個函數,將我需要的東西寫入Excel文件;Django HttpResponse Excel

def create_excel(personal_information): 

    output = StringIO.StringIO() 
    book = xlsxwriter.Workbook(output) 

    sheet = book.add_worksheet() 

    if personal_information['name']: 
     sheet.write(1, 1, personal_information['name'], text_format) 

    book.close() 
    output.seek(0) 

    return output 

在我的view.py;

def export(request): 
    personal_information = json.loads(request.POST.get('personal_data')) 

    output = create_excel(personal_information) 
    response = HttpResponse(output.read(), content_type="application/ms-excel") 
    response['Content-Disposition'] = 'attachment; filename=Excel.xls' 

    return response 

但是,那給了「無」。你有什麼想法解決我的問題嗎?

謝謝。在你的函數create_excel :在你看來

output  = io.BytesIO() 
workbook = xlsxwriter.Workbook(output) 
     .... your code ..... 
      at the end of your function 
# close workbook 
workbook.close() 
xlsx_data = output.getvalue() 
return xlsx_data 

+1

如果你'呈現響應之前打印output'會發生什麼?輸出是否正確形成?另外,你的'return response'語句是否正確縮進?它似乎不在問題中...... – rnevius

+0

@rnevius是的我無法正確複製和粘貼代碼,但是在我的原始代碼中沒有縮進問題。當我在返回之前打印輸出時,它會給出「」。當我調試它時,我可以看到有一些未知數字的響應內容。 – waterkinq

+0

另外我需要說的是,我試圖從彈出窗口中的按鈕獲取excel文件。我的意思是也許我需要處理它? – waterkinq

回答

1

試試這個

if request.method == 'POST': 
    response = HttpResponse(content_type='application/vnd.ms-excel') 
    response['Content-Disposition'] = 'attachment; 
filename=your_template_name.xlsx' 
    xlsx_data = create_excel() 
    response.write(xlsx_data)