Excel 的基础用法,手工如何操作Excel, 手工操作excel的流程 1、打开Excel文件,(路径+文件名) 2、获取sheet表单 3、使用行号和列号 确定需要读取的数据 4、关闭文件 两个工具 openpyxl,支持xlsx 新型格式的读写,读取速度还可可以 tablib,支持多种格式读写, xlsx、xls、cvs、json、yaml、html,缺点读取速度慢 xlrd, 经典excel 读取库,局限性强,只能读取,不能写 pandas ,功能强大,太臃肿了,搞数据分析的时候可以用 安装openpyxl pip install openpyxl

openpyxl

1、获取workbook

2、获取sheet

3、获取单元格,获取行和列,cell、row、column

# 读取Excel文件

# 读取文件之前,一定要关闭文件

# windows 下面的路径有反斜杠

wb = openpyxl.load_workbook('d:\cases.xlsx')

# active 是表示被激活的,被选择的

sheet active_sheet = wb.active

# sheetnames 列表当中存储的是字符串, _sheets里面存储的是对象

# 获取所有表单的正确用法

work_sheets = wb.worksheets

# 获取某一个表单,1、通过索引去获取

# sheet = wb.worksheets[0]

# print(sheet)

# 2、通过表单名称获取 # 过时,sheet.没有提示

# sheet = wb.get_sheet_by_name('Sheet1')

# print(sheet)

# 正确用法, sheet. 没有提示 sheet = wb['Sheet1']

# 读取单个单元格,行和列

# 行和列 是从1 开始的,不是python当中的 从0 开始的

# 可以从源码看出,第一个入参是行,第二个入参是列 cell = sheet.cell(1, 2) print(cell)

# cell是一个对象,获取cell的值 print(cell.value)

# 获取某一行的数据 print(sheet[1])

# 获取某一行的值 for columm in sheet[1]: print(columm.value)

# 获取某一列 print(sheet['C'])

# 获取多行 1到3 行,第3行是包含的 print(sheet[1:3])

# 获取所有数据
total_data = list(sheet.rows)
print(total_data)
for row in total_data:
    for cell in row:
        print(cell.value)


# 写入, 一个单元格
# 保存,save('文件名称')
wb.save(r'd:\cases.xlsx')
# 关闭
wb.close()

封装Excel

excel_handler.py

import openpyxl
from openpyxl.worksheet.worksheet import Worksheet


class ExcelHandler():
    def __init__(self, file):
        self.file = file

    def open_sheet(self, name) -> Worksheet:
        """
            在方法后面加 -> 指向类型,代表这个方法返回的类型是这个
            加了Worksheet 类,下面的sheet就会有提示
        :param name:
        :return:
        """
        wb = openpyxl.load_workbook(self.file)
        sheet_name = wb[name]
        return sheet_name

    # 获取表头数据
    def header(self, sheet_name):
        sheet = self.open_sheet(sheet_name)
        headers = []
        for i in sheet[1]:
            headers.append(i.value)
        return headers

    # 获取所有数据
    def read(self, sheet_name):
        sheet = self.open_sheet(sheet_name)
        rows = list(sheet.rows)[1:]
        data = []
        for row in rows:
            data_row = []
            for cell in row:
                data_row.append(cell.value)
                # 是以列表形式存储的
            data.append(data_row)
        return data

     # 写入数据
    @staticmethod
    def write(file, sheet_name, row, column, new_data):
        wb = openpyxl.load_workbook(file)
        sheet = wb[sheet_name]
        sheet.cell(row, column).value = new_data
        wb.save(file)
        wb.close()

    


if __name__ == '__main__':
    excel = ExcelHandler(r'd:\cases.xlsx')
    # data = excel.read('Sheet1')
    excel.write(r'd:\cases.xlsx', 'Sheet1', 3, 1, 'data_new')
    # print(data)

用字典的形式存储

# 获取所有数据
    def read(self, sheet_name):
        sheet = self.open_sheet(sheet_name)
        rows = list(sheet.rows)[1:]

        data = []
        for row in rows:
            data_row = []
            for cell in row:
                data_row.append(cell.value)
                # 用字典的形式存储
                # 列表转成字典,要和header 去zip
                data_dict = dict(zip(self.header(sheet_name), data_row))
            data.append(data_dict)
        return data