Pythonxlrd读取Excel表格基础(⼆):获取单元格内超链接信息、格式信息、
字体格式信息等
前⾔:
在上⼀篇的博客⾥,介绍了如何读取Excel表格中的数据。
其实⼀个Excel表格不仅具有⽂本数据信息,其还包含了⼤量的表格、字体格式信息。因为这些信息⼀般⽤处不⼤,所以在这⾥就简单的介绍⼀下了。
本篇主要内容:
1、获取单元格内超⽂本信息、合并单元格信息等;
2、获取单元格格式信息;
3、获取字体格式信息;
4、获取⾏、列格式信息。
1、获取超⽂本信息等
⽤于测试的表格⽂件为test02.xls,⽂件截图:
获取单元格内超⽂本信息:
# 导⼊模块
import xlrd
# 获取⼯作簿对象
work_book = xlrd.open_workbook('test02.xls',formatting_info =True)
# 按索引获取sheet对象
sheet_1 = work_book.sheet_by_index(0)
# 获取sheet表内超链接⽂本对象
print(sheet_1.hyperlink_list)
# ------运⾏结果------
# [<xlrd.sheet.Hyperlink object at 0x0000019B5A064358>]
# ------运⾏结果------
注:打开Excel⽂件时默认是不读取⽂件格式的,也就是 formatting_info 默认值为 False。
想要获取 Excel ⽂件格式信息,需把 formatting_info 值改为 True,这样主要是为了降低内存消耗。
获取超⽂本对象内容,单元格信息:
# 获取sheet表内超链接对象单元格位置、对象
print(sheet_1.hyperlink_map)
# ------运⾏结果------
# {(11, 2): <xlrd.sheet.Hyperlink object at 0x000001E5824B4EF0>}
# ------运⾏结果------
# 获取超链接⽂件url信息
hyperlink_obj = sheet_1.hyperlink_list[0]
print(hyperlink_obj.url_or_path)
# ------运⾏结果------
# www.sogou/
# ------运⾏结果------
获取合并单元格信息:
# 获取合并单元格信息
print(d_cells)
# ------运⾏结果------
# [(12, 13, 2, 6), (1, 2, 1, 6)]
# ------运⾏结果------
注:这个获得的单元格合并信息有点奇怪:
如 (1, 2, 1, 6) 信息:第⼀个 1 应该是第1⾏(从0开始计数),2 就不是指合并到第 2 ⾏,⽽是2-1 还是合并⾏数为:1;
同理,第三个 1 指的是 第 1 列,第四个6指的是 6-1 合并列数为 5 列。
⼤概是这么理解的吧…
⼀种简单的按⾏读取sheet表内所有数据⽅法:
上⼀篇博客⾥介绍了按⾏、按列读取Excel⽂件sheet表内数据的⽅法,其实这⾥还有⼀种⾮常简单的按⾏读取sheet表内数据的⽅法:# 简单按⾏获取sheet表对象所有值
print(sheet_1._cell_values)
# ------运⾏结果------
# [['', '', '', '', '', ''], ['', 'CSDN 博客数据', '', '', '', ''],
# ['', '⽇期', '访问量', '评论数', '收藏数', '粉丝数'], ['', 43974.0, 17.0, 0.0, 0.0, 0.0],
# ['', 43975.0, 36.0, 0.0, 0.0, 0.0], ['', 43976.0, 22.0, 0.0, 0.0, 0.0],
# ['', 43977.0, 20.0, 0.0, 0.0, 0.0], ['', 43978.0, 18.0, 0.0, 0.0, 0.0],
# ['', 43979.0, 223.0, 0.0, 0.0, 0.0], ['', 43980.0, 1187.0, 0.0, 0.0, 0.0],
# ['', 43981.0, 854.0, 0.0, 0.0, 1.0], ['', '总计:', 2377.0, 0.0, 0.0, 1.0],
# ['', '数据来源:', 'www.sogou/', '', '', '']]
# ------运⾏结果------
⼤家可以和上篇博客⾥的按⾏读取sheet表内数据⽅法⽐较⼀下。
2、获取单元格格式信息
想要获取sheet表内单元格信息,需先获取Excel⽂件所有的单元格格式列表:
# 获取Excel表格所有单元格格式对象列表
xf_list = work_book.xf_list
即:在读取Excel⽂件的时候,当ormatting_info 值设置为 True 时,xlrd 模块已经为我们将Excel⽂件⾥所有单元格信息保存在 xf_list 列表中了。
再在sheet对象⾥获取单元格格式索引,按索引获取单元格格式对象:
# 获取单元格格式对象索引
cell_xf_index = ll_xf_index(2,1)
print(cell_xf_index)# 打印结果:69
# 按索引值获取单元格格式对象
cell_xf = xf_list[cell_xf_index]
print(cell_xf)
# ------运⾏结果------
# <xlrd.formatting.XF object at 0x000001BAF6C646A0>
# ------运⾏结果------
这⾥选取的单元格是:
xlrd ⾥的单元格格式对象 XF(),和xlwt 模块中单元格格式对象类似,包含了⼤量的格式信息。(这⾥⼤家也可以回顾⼀下,前⾯关于 的⽂章。)
xlrd 和 xlwt模块在许多Excel表格处理⽅式上⽐较类似,只不过⼀个是读,⼀个是写。
XF() 类中包含了单元格格式的四个信息:
1、protection:单元格保护信息;
2、background:单元格背景颜⾊信息;
3、alignment:单元格对齐信息;
4、border:单元格边框信息。
protection:单元格保护信息,对应xlrd中formatting⾥的XFProtection类。
# 有两个属性:cell_locked(单元格锁定),formula_hidden(公式隐藏)
protection = cell_xf.protection
ll_locked,',',protection.formula_hidden,)
# ------运⾏结果------
# 1 , 0
# ------运⾏结果------
background:背景颜⾊信息 XFBackground 类
background = cell_xf.background
# 有三个属性:fill_pattern,background_colour_index,pattern_colour_index
print(background.fill_pattern,
',',background.background_colour_index,
',',background.pattern_colour_index)
# ------运⾏结果------
# 1 , 64 , 13
# ------运⾏结果------
注:相应属性对应 xlwt 模块⾥单元格格式设置时的⼀些参数,这⾥就不重复介绍了。
alignment:对齐信息,XFAlignment 类
# 有七个属性:hor_align,vert_align,rotation,text_wrapped,indent_level
# shrink_to_fit,text_direction
alignment = cell_xf.alignment
print(alignment.hor_align,',',
alignment.vert_align,',',
<_wrapped,',',
alignment.indent_level,',',
alignment.shrink_to_fit,',',
<_direction)
# ------运⾏结果------
# 2 , 1 , 0 , 0 , 0 , 0 , 0
# ------运⾏结果------
border:边框信息,XFBorder类
# border 边框信息 XFBorder类
# 有⼗⼆个属性:top_colour_index,bottom_colour_index,left_colour_index
# right_colour_index,diag_colour_index,top_line_style,bottom_line_style,
# left_line_style,right_line_style,diag_line_style,diag_down,diag_up
border = cell_xf.border
p_colour_index,',',border.bottom_colour_index,',',
border.left_colour_index,',',border.right_colour_index,',',
border.diag_colour_index,',',p_line_style,',',
border.bottom_line_style,',',border.left_line_style,',',
border.right_line_style,',',border.diag_line_style,',',
border.diag_down,',',border.diag_up)
# ------运⾏结果------
# 64 , 64 , 64 , 64 , 0 , 1 , 1 , 2 , 1 , 0 , 0 , 0
# ------运⾏结果------
3、获取单元格字体信息
这⾥和单元格格式类似,也需先获取 Excel ⽂件⾥所有的字体对象列表。
# 先获取Excel对象所有的字体对象列表
font_list = work_book.font_list
注意:获取单元格字体对象索引的⽅式,和前⾯不⼀样,其索引是在单元格格式对象属性⾥:
# 字体的font对象索引从xf对象⾥获取
font_index = cell_xf.font_index
print(font_index)# 打印结果 24
# 在Excel⽂件所有字体对象列表中获取字体对象
font = font_list[font_index]
字体对象信息在xlrd模块⾥formatting.py ⽂件中的 Font() 类中。
有以下属性可获取:bold,character_set,colour_index,escapement,
family,font_index,height,italic,name,struck_out,underline_type,underlined,weight,outline,shadow。注:在 xlwt 字体格式设置的介绍⾥,也讲到了上⾯的⼤部分属性的意思…
print(font.bold,',',font.character_set,',',lour_index,',',
font.escapement,',',font.family,',',font.font_index,',',
font.height,',',font.italic,',',font.name,',',
font.struck_out,',',font.underline_type,',',font.underlined,',',
python怎么读取excel文件数据font.weight,',',font.outline,',',font.shadow)
# ------运⾏结果------
# 1 , 134 , 8 , 0 , 3 , 24 , 220 , 0 , 楷体 , 0 , 0 , 0 , 700 , 0 , 0
# ------运⾏结果------
4、获取⾏、列对象格式信息:
获取⾏对象格式信息,先获取sheet表⾏格式信息对象映射:
# 获取sheet表对象⾏信息映射
print(winfo_map)
# ------运⾏结果------
# {0: <xlrd.sheet.Rowinfo object at 0x00000172E7C69EA0>,
# 1: <xlrd.sheet.Rowinfo object at 0x00000172E7C72158>,
# 2: <xlrd.sheet.Rowinfo object at 0x00000172E7C721E0>,
# 3: <xlrd.sheet.Rowinfo object at 0x00000172E7C72268>,
# 4: <xlrd.sheet.Rowinfo object at 0x00000172E7C72268>,
# 5: <xlrd.sheet.Rowinfo object at 0x00000172E7C72268>,
# 6: <xlrd.sheet.Rowinfo object at 0x00000172E7C72268>,
# 7: <xlrd.sheet.Rowinfo object at 0x00000172E7C72268>,
# 8: <xlrd.sheet.Rowinfo object at 0x00000172E7C72268>,
# 9: <xlrd.sheet.Rowinfo object at 0x00000172E7C72268>,
# 10: <xlrd.sheet.Rowinfo object at 0x00000172E7C72268>,
# 11: <xlrd.sheet.Rowinfo object at 0x00000172E7C69EA0>}
# ------运⾏结果------
可获取的⾏格式信息有:
'''
"height",
"has_default_height",
"outline_level",
"outline_group_starts_ends",
"hidden",
"height_mismatch",
"has_default_xf_index",
"xf_index",
"additional_space_above",
"additional_space_below"
'''
获取第 1 ⾏格式信息:
print(row_0_info.height,',',row_0_info.has_default_height,',',
row_0_info.outline_level,',',row_0_info.outline_group_starts_ends,',',
row_0_info.hidden,',',row_0_info.height_mismatch,',',
row_0_info.has_default_xf_index,',',row_0_info.xf_index,',',
row_0_info.additional_space_above,',',row_0_info.additional_space_below)
# ------运⾏结果------
# 399 , 0 , 0 , 0 , 0 , 1 , 0 , -1 , 0 , 0
# ------运⾏结果------
获取列格式对象信息:
注:xlrd模块获取列信息接⼝,好像也有问题…,结果只有⼀列…
print(linfo_map)
# 打印结果
# {1: <xlrd.sheet.Colinfo object at 0x000002806C8D4C18>}
结尾:
以上就是本篇博客的全部内容了,感谢阅读。
到这⾥关于 Python 第三⽅模块 xlwt(写)、xlrd(读)对Excel表格的操作讲解基础内容,基本上算是讲完了。后⾯准备结合三到五个实例来综合讲解⼀下,⼤家在实际使⽤Python操作Excel表格时,有什么问题或想法的话,可留⾔或私信我,⼀起讨论交流⼀下。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论