a6733296 2021-05-31 17:35 采纳率: 33.3%
浏览 948

pandas使用to.excel后,如何保留原有的sheet

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()
  • 写回答

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>}
    评论

报告相同问题?

悬赏问题

  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境