2019独角兽企业重金招聘Python工程师标准>>>
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=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)