使用openpyxl模塊將Excel中的數據導入數據庫


這里將不介紹openpyxl模塊的詳細操作。

主要就是記錄一個使用openpyxl模塊將Excel表格的數據導入數據庫中的實例。

from openpyxl import load_workbook

import os,django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "項目名稱.settings")        
django.setup()

from backend.models import User          

# 封裝成一個函數,調用是傳入表格路徑即可
def xlsxHandler(localpath):
    wb = load_workbook(localpath)   # 打開已存在的execl文件,格式xlsx

    ws = wb[wb.sheetnames[0]]       # 選擇第一張sheet表
    rows = ws.max_row               # 獲取表的最大行數
    columns = ws.max_column         # 獲取表的最大列數

    column_heading = [ws.cell(row=1,column=x).value for x in  range(1,columns+1)]   # 讀取excel第一行的值,寫入list

    column_name = ['用戶名','公司名稱','電話']      # 數據庫必需字段

    # print(column_heading)         # 文件第一行title

    if len([name for name in column_name if name not in column_heading]) == 0:  # 返回字段組成的list為空,則說明文件列標題包含MySQL需要的字段
        print(' - 檢查完成,執行寫入')
        # 判斷Excel中各字段所在列號
        username = column_heading.index(column_name[0])         # 用戶名 - 位置
        company = column_heading.index(column_name[1])         # 公司 - 位置
        phone = column_heading.index(column_name[2])          # 電話 - 位置


        if ws.cell(row=2,column=1).value == None:
            table_start_line = 3
        else:
            table_start_line = 2
        data = []
        userList = []
        for row in range(table_start_line, rows + 1):
            for column in range(1, columns + 1):  # 因為從第1列開始,所以此處從1開始
                data.append(str(ws.cell(row=row, column=column).value))  # 以字符串形式保存數據到MySQL
            print(data)
            print(data[username],data[company],data[phone])
            userList.append(User(username=data[username],company=data[company],phone=data[phone]))
            data = []
        print('userList ',userList )

        try:
            User.objects.bulk_create(userList )       # 使用bulk_create批量導入
            msg = '導入成功'
        except Exception as e:
            print('異常',e)
            msg = '導入失敗'
    else:
        print('文件列標題不完全包含數據庫需要的字段,請檢查文件。')
        msg = '文件列標題不完全包含數據庫需要的字段,請檢查文件。'
    wb.close() # 關閉excel

    return msg

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM