• Python openpyxl模块


    打开Excel  ->  选择表单  ->  获取单元格的值 / 修改单元格的值 / 标题数据组成字典 -> 另存为 / 保存

     1 import os
     2 from openpyxl import load_workbook
     3 
     4 
     5 # 需要打开文件的路径, Excel跟py文件在同一个目录
     6 file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'testcases.xlsx')
     7 
     8 # 创建workbook对象 - 打开Excel
     9 wb = load_workbook(file_path)
    10 
    11 # 选择表单 wb['表单名']
    12 sh = wb['login']
    13 
    14 # 单元格对象 行列都是1开始数起
    15 # 读取单元格的值
    16 cel = sh.cell(2, 2)
    17 print(cel.value)    # 2行2列的值
    18 
    19 # 修改单元格的值
    20 sh.cell(2, 2).value = 'New Value'   # 修改值保存在内存中,非文件
    21 print(sh.cell(2, 2).value)
    22 
    23 # 读取所有行
    24 all_rows = list(sh.rows)   # 一个列表保住所有行
    25 for item in all_rows:     # item是每一行
    26     for cel in item:    # cel是每一行的单元格
    27         print(cel.value)
    28 
    29 for item in all_rows[1:]:    # 指定开始行号
    30     pass
    31 
    32 # 获取标题行
    33 titles = []
    34 for header in all_rows[0]:
    35     titles.append(header.value)
    36 
    37 # 把标题行和值组成字典   -- 方法1
    38 """
    39 data_lists = []
    40 for item in all_rows[1:]:
    41     value_dict = {}
    42     for index in range(len(item)):
    43         value_dict[titles[index]] = item[index].value
    44     data_lists.append(value_dict)
    45 """
    46 
    47 # 把标题行和值组成字典   -- 方法2 -- 推荐
    48 data_lists = []
    49 for item in all_rows[1:]:
    50     values = []
    51     for val in values.value:
    52         values.append(val)       # 一行数据 列表
    53     res = dict(zip(titles, values))    # 每获取一行数据的列表,就跟标题组成一个字典
    54     res["字典型字符串"] = eval(res["字典型字符串"])   # 字典类型的字符串转成字典
    55     data_lists.append(res)    # 把所有字典放在列表里
    56 wb.close()   # 属于第三方资源,需要关闭
    57 # 保存修改,有save()就不需要close()
    58 wb.save("save_as_another_excel.xlsx")   # 保存到另外的文件
    59 wb.save(file_path)   # 保存到原文件,需要关闭原文件,不然提示权限不足

    1. zip() 打包函数,将2个列表组成成字典

    2. eval() 把字典类型的字符串转成字典

    3. Excel读取出来的数据只有2种类型:数字、字符串

    4. 单元格的值是公式就算出来的,读取的时候只读取值

    5. 操作Excel时,要确保Excel被关闭

    6. 操作完Excel后,记得关闭 close()

    封装Excel读取

    from openpyxl import load_workbook
    
    
    class HandleExcel():
    
        def __init__(self, file_path, workbook):
            self.wb = load_workbook(file_path)
            self.sh = self.wb[workbook]
    
        def read_titles(self):
            """
            读取Excel第一行
            :return: 标题列表
            """
            titles = []
            for item in list(self.sh.rows)[0]:
                titles.append(item.value)
            return titles
    
        def read_datas(self):
            """
            从Excel的第二行开始读取
            :return: 数据行列表
            """
            all_datas = []
            for item in list(self.sh.rows)[1:]:
                values = []
                for val in item:
                    values.append(val.value)
                all_datas.append(values)
            return all_datas
    
        def read_all_data_with_title(self):
            """
            标题和数据行组成的字典
            :return: 
            """
            titles = self.read_titles()
            datas = self.read_datas()
            all_datas = []
            for data in datas:
                data_dict = dict(zip(titles, data))
                all_datas.append(data_dict)
            return all_datas
    
        def close_file(self):
            """
            excel属于第三方资源,用完后要关闭释放
            :return: 
            """
            self.wb.close()
    
    
    if __name__ == '__main__':
        handle_excel = HandleExcel('xxx表.xlsx', 'xxx工作单')
        titles = handle_excel.read_titles()
        datas = handle_excel.read_datas()
        data_with_title = handle_excel.read_all_data_with_title()
        handle_excel.close_file()
        print(titles)
        print(datas)
        print(data_with_title)
  • 相关阅读:
    5.5,5.6
    5.1,5.2
    第四章.编程练习
    多源最短路径--flody算法
    Java 面试题
    python 打包exe程序
    sql优化
    二叉树
    todo: 队列、栈、散列集
    java注解
  • 原文地址:https://www.cnblogs.com/sue2015/p/16071827.html
Copyright © 2020-2023  润新知