1. 程式人生 > >Django匯出功能

Django匯出功能

匯出Excel

  • 使用openpyxl生成Excel並匯出下載``
  • Example:
    import openpyxl
    from django.utils.http import urlquote # 下載檔案中文需要編碼需要使用這個
    
    def exportToExcel(request):
        # 建立一個WorkBook
        wb = openpyxl.Workbook()
        # 建立一個Sheet
        sheet = wb.active
        # 往Excel的Sheet填充內容
        sheet.cell(1, 1, '被審計單位')
        sheet.
    cell(1, 2, '審計年度') sheet.cell(1, 3, '審計組長/主審') sheet.cell(1, 4, '單位預算程式碼') # 設定響應頭 response = HttpResponse(content_type='application/msexcel') # 設定下載檔案編碼,需要使用urlquote filename = urlquote('中文.xlsx') response[ 'Content-Disposition'] = f"attachment;filename*=utf-8'zh_cn'{filename}"
    # 儲存Excel到相應中 wb.save(response) return response
  • django中編寫下載檔案的程式碼時如果下載的檔名中包含中文,需要做特別的處理,不然無法正常下載檔案,在請求中中文需要被編碼;在django中提供了一個函式處理中文的編碼:
    from django.utils.http import urlquote  #  下載檔案中文需要編碼需要使用這個
    filename = urlquote(filename)
    response['Content-Disposition'] = f'attachment;filename="{filename}"'
  • 解決FireFox中下載中文檔案的亂碼:就是修改響應頭中的內容加上*以及utf-8’zh_cn’這部分的內容
    "Content-Disposition","attachment;filename*=utf-8'zh_cn'檔名.xx"
    # Django
    response['Content-Disposition'] = "attachment;filename*=utf-8'zh_cn'" + filename
    

匯出Word

  • django中匯出word檔案使用的庫是python-docx;在進行word匯出操作時,先生成一個word檔案,在下載該word檔案到本地,最後刪除這個word檔案,此時就有一個檔案被使用無法刪除的問題,解決方式是通過用一個list變數儲存該檔案的二進位制位元組字串,然後刪除原始檔,利用該中間的list變數去完成下載的工作,傳參給FileResponse