python 学习 --- Excel 相关

本贴最后更新于 715 天前,其中的信息可能已经物是人非
一、安装第三方库
pip3 install openpyxl -i https://mirrors.huaweicloud.com/

二、excel组成和python里面对象对应起来
组成:多个单元格组成一个表单,多个表单组成excel文件
1、excel文件 == 表对象
2、表单 == 表单对象
3、单元格 == 单元格对象


三、python操作excel的步骤
1、wb_obj = load_workbook()
参数:
filename: excel文件名称,如果是当前运行文件目录下的excel文件可以直接写文件名称
                      如果不是在当前目录下,必须传入带绝对路径的excel文件名称
read_only=False: 可以读写
keep_vba=KEEP_VBA: 支持写vba的代码,是否要保留vba的代码(跟自动化没关系)
data_only=False: 默认是False值显示公式,不会计算结果
                 True:单元格中会计算公式的结果再读出来
keep_links=True: 是否保留外面链接(跟自动化没关系)

2、操作流程
wb_obj = load_workbook(filename="case_data.xlsx")
print("表对象:",wb_obj)
#获取表单对象
sheet_obj = wb_obj["Sheet1"]
print("表单对象:",sheet_obj)
# 获取单元格对象
cell_obj = sheet_obj["B3"]
print("单元格对象:",cell_obj)
#获取对应单元格的值
value = cell_obj.value
print("单元格的值:",value)
wb_obj.close()

3、获取所有sheet名称
sheet_names = wb_obj.sheetnames

4、获取所有的sheet对象
for name in sheet_names:
    obj = wb_obj[name]
    print(obj,type(obj))
  
5、通过索引获取sheet对象
sheet的索引从0开始
sheet_obj = wb_obj.worksheets[0]

6、获取单元格数据
cell对象获取value属性拿到单元格数据
cell_obj.value


7、通过行和列的位置取获取单元格对象
cell_obj = sheet_obj["B3"]
cell_obj = sheet_obj.cell(2,2) #索引从1开始

四、excel读取数据封装
from openpyxl import load_workbook


class HandExcel:

    def __init__(self, file_name, sheet_name):
        # 加载excel
        self.wb_obj = load_workbook(filename=file_name)
        # 获取表单对象
        self.sheet_obj = self.wb_obj[sheet_name]

    def get_excel_test_case(self):
        try:
            case_list = []
            # 获取行数据
            datas = list(self.sheet_obj.iter_rows(values_only=True))
            # 表头
            case_title = datas[0]
            case_datas = datas[1:]
            for case in case_datas:
                # 组装成字典
                res = dict(zip(case_title, case))
                # 放到list
                case_list.append(res)

            print("封装的字典", case_list)
            return case_list
        except Exception as e:
            print("读取excel报错", e)
        finally:
            self.close_file()

    def close_file(self):
        self.wb_obj.close()


if __name__ == '__main__':
    cl = HandExcel(file_name="case_data.xlsx", sheet_name="demo01")
    cl.get_excel_test_case()
回帖
请输入回帖内容 ...