import pandas as pd
df1 = pd.read_excel(r'G:\工作\德宏\实验\高负荷\网络质量透视:高负荷小区_7天轮询202105310901_001891.xlsx',sheet_name='Sheet1')
df2 = pd.read_excel(r'G:\工作\德宏\实验\高负荷\性能:农村单层网高流量扇区统计表(天)202105310903_680063.xlsx',sheet_name='Sheet1')
writer = pd.ExcelWriter(r'G:\工作\德宏\实验\高负荷\无线网攻坚日报汇总-2021.5.28-新模板.xlsx')
df1.to_excel(writer, sheet_name = '高负荷明细', index = False)
df2.to_excel(writer, sheet_name = '单层网明细', index = False)
writer.save()
writer.close()
pandas使用to.excel后,如何保留原有的sheet
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 小P聊技术 2021-05-31 18:00关注
本篇主要内容:
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) # ------运行结果------ # https://www.sogou.com/ # ------运行结果------
获取合并单元格信息:
# 获取合并单元格信息 print(sheet_1.merged_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], # ['', '数据来源:', 'https://www.sogou.com/', '', '', '']] # ------运行结果------
大家可以和上篇博客里的按行读取sheet表内数据方法比较一下。
2、获取单元格格式信息
想要获取sheet表内单元格信息,需先获取Excel文件所有的单元格格式列表:
# 获取Excel表格所有单元格格式对象列表 xf_list = work_book.xf_list
即:在读取Excel文件的时候,当ormatting_info 值设置为 True 时,xlrd 模块已经为我们将Excel文件里所有单元格信息保存在 xf_list 列表中了。
再在sheet对象里获取单元格格式索引,按索引获取单元格格式对象:
# 获取单元格格式对象索引 cell_xf_index = sheet_1.cell_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 模块中单元格格式对象类似,包含了大量的格式信息。(这里大家也可以回顾一下,前面关于 xlwt 将数据写入Excel表格 :单元格格式、字体格式、对齐方式、边框及填充设置等 的文章。)
xlrd 和 xlwt模块在许多Excel表格处理方式上比较类似,只不过一个是读,一个是写。XF() 类中包含了单元格格式的四个信息:
1、protection:单元格保护信息;
2、background:单元格背景颜色信息;
3、alignment:单元格对齐信息;
4、border:单元格边框信息。protection:单元格保护信息,对应xlrd中formatting里的XFProtection类。
# 有两个属性:cell_locked(单元格锁定),formula_hidden(公式隐藏) protection = cell_xf.protection print(protection.cell_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,',', alignment.rotation,',', alignment.text_wrapped,',', alignment.indent_level,',', alignment.shrink_to_fit,',', alignment.text_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 print(border.top_colour_index,',',border.bottom_colour_index,',', border.left_colour_index,',',border.right_colour_index,',', border.diag_colour_index,',',border.top_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,',',font.colour_index,',', font.escapement,',',font.family,',',font.font_index,',', font.height,',',font.italic,',',font.name,',', font.struck_out,',',font.underline_type,',',font.underlined,',', font.weight,',',font.outline,',',font.shadow) # ------运行结果------ # 1 , 134 , 8 , 0 , 3 , 24 , 220 , 0 , 楷体 , 0 , 0 , 0 , 700 , 0 , 0 # ------运行结果------
4、获取行、列对象格式信息:
获取行对象格式信息,先获取sheet表行格式信息对象映射:
# 获取sheet表对象行信息映射 print(sheet_1.rowinfo_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>} # ------运行结果------
可获取的行格式信息有:
获取第 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(sheet_1.colinfo_map) # 打印结果 # {1: <xlrd.sheet.Colinfo object at 0x000002806C8D4C18>}
解决评论 打赏 举报无用 2
悬赏问题
- ¥15 请把下列每一行代码完整地读懂并注释出来
- ¥15 pycharm运行main文件,显示没有conda环境
- ¥15 易优eyoucms关于二级栏目调用的问题
- ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
- ¥15 为什么eclipse不能再下载了?
- ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
- ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
- ¥15 特定网页无法访问,已排除网页问题
- ¥50 如何将脑的图像投影到颅骨上
- ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境