Excel中的三大对象

  • WorkBook:工作簿对象
  • Sheet:表单对象
  • Cell:表格对象

一、使用openpyxl模块

  • openpyxl:主要针对xlsx格式的excel进行读取和编辑
  • 安装模块:pip install --user openpyxl
import openpyxl


class XlsxUtil:
    """
    xlsx文件读写操作
    写入数据之前,该文件一定要处于关闭状态
    """
    def __init__(self, file_path, sheet_name=None):
        self.file_path = file_path
        self.workbook = None
        self.sheet = None
        self.file_name = self.file_path.split('\\')[-1]
        if sheet_name:
            self.sheet_name = sheet_name
        else:
            self.sheet_name = 'new'

    """
    xlsx基础操作
    """
    # 打开已有工作簿,选取表单
    def open_workbook(self):
        self.workbook = openpyxl.load_workbook(self.file_path)  # 打开工作簿
        self.sheet = self.workbook[self.sheet_name]  # 选取表单

    # 创建一个工作簿和表单
    def new_workbook(self):
        self.workbook = openpyxl.Workbook()  # 创建一个工作薄
        del self.workbook['Sheet']  # 删除默认表单,表单名称是sheet

    # 关闭工作簿
    def close_workbook(self):
        self.workbook.close()  # 关闭工作薄

    # 在工作簿添加一个表单
    def add_sheet(self):
        self.workbook.create_sheet(self.sheet_name)  # 新增一个sheet表单

    # 保存工作簿
    def save_workbook(self):
        self.workbook.save(self.file_path)  # 保存xlsx文件

    # 获取最大行总数
    def max_row(self):
        self.open_workbook()  # 打开工作簿
        return self.sheet.max_row

    # 获取最大列总数
    def max_column(self):
        self.open_workbook()  # 打开工作簿
        return self.sheet.max_column

    # 删除表单
    def delete_sheet(self):
        self.open_workbook()  # 打开工作簿
        del self.workbook[self.sheet_name]
        self.save_workbook()  # 保存工作簿

    # 在第row行,第column列,写入数据
    def write_cell(self, row, column, value):
        self.open_workbook()  # 打开工作簿
        self.sheet_name.cell(row=row, column=column, value=value)

    # 读取表单第row行、第column列的数据
    def get_cell_data(self, row, column):
        self.open_workbook()  # 打开工作簿
        cell = self.sheet.cell(row=row, column=column)  # 读取第row行、第column列的数据
        return cell.value


    """
    xlsx组合操作
    """
    # 创建一个工作簿和表单
    def create_workbook(self):
        self.new_workbook()  # 创建一个工作薄
        self.add_sheet()  # 新增一个sheet表单
        self.save_workbook()  # 保存xlsx文件
        self.close_workbook()  # 关闭工作薄

    # 在已有的工作簿,添加新的表单页
    def add_new_sheet(self):
        self.open_workbook()  # 打开工作簿
        self.add_sheet()  # 新增一个sheet表单
        self.save_workbook()  # 保存xlsx文件
        self.close_workbook()  # 关闭工作薄

    # 读取表单全部数据,按行保存
    def get_all_cell_data(self):
        self.open_workbook()  # 打开工作簿
        max_row = self.max_row()
        all_cell_data_list = []  # 保存全部数据
        for row in range(1, max_row + 1):
            row_data_list = self.get_row_data(row)  # 按行读取数据
            all_cell_data_list.append(row_data_list)
        return all_cell_data_list

    # 读取表单某一行数据
    def get_row_data(self, row):
        self.open_workbook()  # 打开工作簿
        all_row_data = list(self.sheet.rows)  # 按行读取数据
        row_data = all_row_data[row - 1]  # 读取表单某一行数据
        row_data_list = []
        for cell in row_data:
            row_data_list.append(cell.value)
        return row_data_list

    # 读取表单某一列数据
    def get_column_data(self, column):
        self.open_workbook()  # 打开工作簿
        all_column_data = list(self.sheet.columns)  # 按列读取数据
        column_data = all_column_data[column - 1]  # 读取表单某一列数据
        column_data_list = []
        for cell in column_data:
            column_data_list.append(cell.value)
        return column_data_list

    # 删除表单某一列数据
    def delete_column_data(self, column):
        self.open_workbook()  # 打开工作簿
        self.sheet.delete_cols(column, 1)  # 删除column列,即从column列开始,总共删除1列
        self.save_workbook()  # 保存工作簿

    # 删除表单某一行数据
    def delete_row_data(self, row):
        self.open_workbook()  # 打开工作簿
        self.sheet.delete_rows(row, 1)  # 删除row行,即从row行开始,总共删除1行
        self.save_workbook()  # 保存工作簿

    # 通过列标题,返回列号
    def get_field_column(self, field_name):
        row_data_list = self.get_row_data(1)
        count = 0
        column_num = False
        for row_data in row_data_list:
            if row_data == field_name:
                column_num = count
            else:
                count += 1
        return column_num + 1

 

二、使用xlrd库

  • xlrd库:从excel中读取数据,支持xls、xlsx

 

 

 

三、使用xlwt库

  • xlwt库:对excel进行修改操作,不支持对xlsx格式的修改

 

 

四、使用xlutils库

  • xlutils库:在xlw和xlrd中,对一个已存在的文件进行修改。