Python模块-xlrd模块 Django读取Excel数据储存到数据库

xlrd模块

xlrd模块说明

xlrd是一个库,用于从Excel文件中读取数据和格式化信息,无论它们是.xls还是.xlsx文件 xlrd方法有很多种,这里只说明常用的 xlrd.open_workbook Excel文件读取方法 本文不涉及带有公式和宏的复杂Excel公式

资料说明

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

安装xlrd模块

使用pip安装

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=FalseFalse状态为没有特殊需求,默认加载全部
ragged_rows=FalseFalse状态为空行用空单元格

参数示例

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_ObjExcel中的数据表对象Excel_Obj.sheet_by_name(u'sheet1')
Tab_Datamodels数据库表对象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)

转载于:https://my.oschina.net/zhaojunhui/blog/2981146

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值