zoukankan      html  css  js  c++  java
  • 使用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
    
  • 相关阅读:
    POJ 1149
    最小费用最大流邻接表模板
    poj 1724 最短路+优先队列(两个约束条件)
    hdu 4786 最小生成树与最大生成树
    hdu 4081 最小生成树变形
    poj 3228 二分+最大流
    poj 2516 最小费用最大流
    hdu 3605 二分图多重匹配
    hdu 3605 最大流sap+二进制思想(啊啊)
    hdu 3572 最大流判断满流
  • 原文地址:https://www.cnblogs.com/ray-h/p/10736382.html
Copyright © 2011-2022 走看看