1. 程式人生 > >Python模組-xlwt模組 Django從資料庫匯出Excel

Python模組-xlwt模組 Django從資料庫匯出Excel

xlwt模組

xlwt模組說明

xlwt是一個庫,用於向舊的Excel檔案(即.xls)寫入資料和格式化資訊。

資料說明

https://xlwt.readthedocs.io/en/latest/

安裝模組

使用pip安裝

pip install xlwt

官方地址

https://pypi.org/project/xlwt/

xlwt.Workbook()引數

引數釋義
Owner設定文件所有者
country_code國家嗎
wnd_protect視窗保護
obj_protect物件保護
Protect保護
backup_on_save儲存時備份
Hpos橫向座標
Vpos縱向座標
Width寬度
Height高度
active_sheet活動表
tab_widthtab寬度
wnd_visible視窗是否可見
wnd_mini視窗最小化
hscroll_visible橫向滾動條是否可見
vscroll_visible縱向滾動條是否可見
tabs_visibletab是否可見
dates_1904是否使用1904日期系統
use_cell_values單元格的值
default_style預設樣式
colour_RGBrgb顏色
encoding指定儲存檔案編碼

建立和匯出

import xlwt

Excel_obj = xlwt.Workbook(encoding='utf-8')     # 建立要匯出的 Excel 表格物件並指定編碼
Excel_tab = Excel_obj.add_sheet('sheet1')       # 建立 Excel 表(sheet1為Excel選項卡的表名,並非Excel檔名)
Excel_tab.write(0, 2, '我是資料')                # 索引第1行,第3列並寫入資料

Excel_obj.save('./Test_Excel.xls')              # 儲存匯出 Excel 格式檔案

整個資料庫匯出Excel檔案示例

帶註釋版

【下方有函式版精簡版】

from django.shortcuts import render
from APP import models
import xlwt

def xlwt_test(request):
    Test_Data = models.Test_Tab.objects.values()                        # Test_Tab 中的所有資料物件

    DATA_title = list(Test_Data[0].keys())
    Line_len = len(Test_Data)
    Col_len = len(DATA_title)

    print("總資料:", Test_Data)

    print("資料欄位名:", DATA_title)
    print("資料總行數:", Line_len)
    print("資料總列數:", Col_len)

    Excel_obj = xlwt.Workbook(encoding='utf-8')                         # 建立要匯出的 Excel 表格物件並指定編碼
    Excel_tab = Excel_obj.add_sheet('sheet1')                           # 建立 Excel 表(sheet1為Excel選項卡的表名,並非Excel檔名)

    for T in range(0,Col_len):                                          # 列迴圈---便於寫入 SQL欄位[Ecel標題]
        Excel_tab.write(0, T,DATA_title[T])
        print("標題索引列:",T,"當前列名:",DATA_title[T])
    for C in range(0, Line_len):                                        # 行迴圈---便於逐行寫入資料
        DATA_line = dict(Test_Data[C])
        print("########################")
        print("當前行索引位:", C)
        print("當前資料庫行資料:",DATA_line)

        for L in range(0, Col_len):                                     # 行迴圈巢狀列迴圈---便於寫入每個欄位/表格的資料
             DATA_field = DATA_title[L]
             DATA_value = DATA_line.get(DATA_field)
             Excel_tab.write(C+1,L,DATA_value)

             print("當前列索引位:", L)
             print("當前列的欄位名:", DATA_field)
             print("當前列寫入的資料", DATA_value)

    Excel_obj.save('./Test_Excel.xls')                                  # 匯出 Excel 格式檔案
    return render(request,"dialogue.html",locals())

自定義函式版

直接加對應引數執行即可

引數說明示例
Tab_Data資料庫查詢出來的物件DATA = models.Test_Tab.objects.values()
Tab_Name匯出的Excel表名稱'sheet1'
Sav_Path匯出的Excel檔案絕對路徑'./Test_Excel.xls'

使用示例

Xlwt_Export(Test_Data,'sheet1','./Test_Excel.xls')

函式寫法【不懂請看上方帶註釋版】

# -*- coding:utf8 -*-
import xlwt
def Xlwt_Export(Tab_Data,Tab_Name,Sav_Path):
    try:
        DATA_title = list(Tab_Data[0].keys())
        Line_len = len(Tab_Data)
        Col_len = len(DATA_title)
        Excel_obj = xlwt.Workbook(encoding='utf-8')
        Excel_tab = Excel_obj.add_sheet(Tab_Name)
        for T in range(0,Col_len):
            Excel_tab.write(0, T,DATA_title[T])
        for C in range(0, Line_len):
            DATA_line = dict(Tab_Data[C])
            for L in range(0, Col_len):
                 DATA_field = DATA_title[L]
                 DATA_value = DATA_line.get(DATA_field)
                 Excel_tab.write(C+1,L,DATA_value)
        Excel_obj.save(Sav_Path)
    except Exception  as e:
        print("錯誤資訊:",e)