這里將不介紹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