Python模塊-xlrd模塊 Django讀取Excel數據儲存到數據庫

xlrd模塊

xlrd模塊說明

xlrd是一個庫,用於從Excel文件中讀取數據和格式化信息,不管它們是.xls仍是.xlsx文件 xlrd方法有不少種,這裏只說明經常使用的 xlrd.open_workbook Excel文件讀取方法 本文不涉及帶有公式和宏的複雜Excel公式數據庫

資料說明app

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

安裝xlrd模塊

使用pip安裝ide

pip install xlrd

官方地址函數

https://pypi.org/project/xlrd/

xlrd.open_workbook(參數)

參數說明 釋義
filename 要打開的電子表格文件的路徑
logfile 寫入消息和診斷信息的日誌文件
verbosity 增長寫入日誌文件的跟蹤材料的數量
use_mmap 是否使用 mmap 模塊
file_contents 文件內容
encoding_override 文件編碼
formatting_info 格式化信息
on_demand=False False狀態爲沒有特殊需求,默認加載所有
ragged_rows=False False狀態爲空行用空單元格

參數示例

xlrd.open_workbook(
        filename=None, 
        logfile=<_io.TextIOWrapper name='' mode='w' encoding='UTF-8'>, 
        verbosity=0, 
        use_mmap=1, 
        file_contents=None, 
        encoding_override=None, 
        formatting_info=False, 
        on_demand=False, 
        ragged_rows=False)

讀取Excel對象參數和示例

# -*- coding:utf8 -*-
import xlrd                                         #導入模塊
Excel_Obj = xlrd.open_workbook('../file/111.xls')   #打開Excel文件

print("Excel 對象:",Excel_Obj)
print("Excel 全部表名稱",Excel_Obj.sheet_names())

print("索引獲取數據對象", Excel_Obj.sheet_by_index(0))
print("索引獲取數據對象", Excel_Obj.sheets()[0])

Tab_Obj = Excel_Obj.sheet_by_name(u'sheet1')        #選中指定表對象,sheet1爲表名稱(Excel中標籤頁選項卡名稱,並不是Excel表格文件名稱)

print("標籤頁行數:",Tab_Obj.nrows)
print("標籤頁列數:",Tab_Obj.ncols)
print("指定行內容:",Tab_Obj.row_values(0))        #索引第1行數據
print("指定行內容:",Tab_Obj.row_values(0,3))      #索引第1行,從第4列數據開始
print("指定列內容:",Tab_Obj.col_values(0))        #索引第1列數據
print("指定列內容:",Tab_Obj.col_values(0,3))      #索引第1列,從第4行數據開始
print("經過行號索引:",Tab_Obj.row(0)[1].value)    #索引第1行第2列內容

讀取Excel對象使用Django存儲到數據庫

==函數參數說明:==編碼

  • 數據表須要本身創建
  • "sheet1" 爲Excel選項卡中的表名
  • Test_Tab 爲models中的數據表名
參數 說明 示例
Excel_Obj 讀取的Excel文件對象 Excel_Obj = xlrd.open_workbook('SK_Auxiliary/file/' + file_obj.name + "")
Tab_Obj Excel中的數據表對象 Excel_Obj.sheet_by_name(u'sheet1')
Tab_Data models數據庫表對象 Excel_write(Tab_Obj,models.Test_Tab)

帶註釋版本

def Excel_write(Tab_Obj,Tab_Data):

    DT = Tab_Data.__doc__                                                       #拿到數據庫全部字段(未篩選)
    Title_List = DT[DT.find('(') + 1:DT.find(')')].split(",")                   #已篩選的全部數據庫字段列表
    Title_List.pop(0)                                                           #刪除ID字段,用於添加ID字段外的數據
    print("數據庫字段:",Title_List)

    print("總列數:", Tab_Obj.ncols)
    for H in range(1,Tab_Obj.nrows):                                            #循環全部行數
        dic = {}
        N = Tab_Obj.row_values(H)                                               #excel表格當前行的數據
        print("當前是",H,"行內容是:",N)                                        #當前行內容
        for L in range(0,Tab_Obj.ncols):                                        #循環全部列
            print("當前行:", H, "當前數據庫字段名:",Title_List[L].strip())
            print("當前行:", H, "當前數據庫字段值:", N[L])
            dic[Title_List[L].strip()]=N[L]
        print("要寫入數據庫的數據字典:",dic)
        Tab_Data.objects.create(**dic)

簡潔版【不帶註釋】

def Excel_write(Tab_Obj,Tab_Data):
    try:
        DT = Tab_Data.__doc__         
        Title_List = DT[DT.find('(') + 1:DT.find(')')].split(",")               
        Title_List.pop(0)
        for H in range(1,Tab_Obj.nrows):
            dic = {}
            N = Tab_Obj.row_values(H)        
            for L in range(0,Tab_Obj.ncols):
                dic[Title_List[L].strip()]=N[L]
            Tab_Data.objects.create(**dic)
    except Exception as e:
        print("錯誤信息:", e)
相關文章
相關標籤/搜索