python openpyxl模块excel读写操作

一、安装

pip install openpyxl

二、简介

openpyxl对excel的抽象,主要有Workbook、Worksheet、Cell三个。
Workbook是对工作簿的抽象,Worksheet是对表格的抽象,Cell是对单元格的抽象。每个类都包含了若干的属性和方法。

2.1 Workbook对象

属性

active:获取活跃的Worksheet
read_only:是否以read_only模式打开excel文档
encoding:文档的元数据,如标题、创建者、常见日期等
worksheets:以列表形式返回所有的Worksheets

方法

get_sheet_names:获取所有表格的名称
get_sheet_by_name:通过表格名称获取表格对象
get_active_sheet:获取活跃的表格
remove_sheet:删除表格
create_sheet:创建一个空的表格
copy_sheet:在工作簿内拷贝表格

2.2 Worksheet对象

属性

title:表格的标题
max_row:表格的最大行
min_row:表格的最小行
max_column:表格的最大列
min_column:表格的最小列
rows:按行获取单元格(Cell对象)
column:按列获取单元格(Cell对象)
freeze_panes冻结窗格
values:按行获取表格的内容

方法

iter_rows:按行获取所有的单元格(Cell对象)
iter_columms:按列获取所有的单元格
append:在表格末尾添加数据
mered_cells:合并多个单元格
unmerge_cells:移除合并的单元格

2.3 Cell对象

row:单元格所在的行
column:单元格所在的列
value:单元格的取值
cordinate:单元格的坐标

三、小应用

3.1 合并excel文档

将多个excel合并为单个文件,对于熟练的excel操作人员也没有办法快速处理。这时利用python编程可以快速处理excel合并,比如合并部门所有人员的绩效总结

import os
import glob
import openpyxl


def merge_xlsx_files(xlsx_files):
    wb = openpyxl.load_workbook(xlsx_files[0])
    ws = wb.active
    ws.title = 'merge_results'

    for filename in xlsx_files[1:]:
        workbook = openpyxl.load_workbook(filename)
        worksheet = workbook.active
        for row in worksheet.iter_rows(min_row = 2):
            values = [cell.value for cell in row]
            ws.append(values)
    return wb

def get_all_xlsx_files(path):
    xlsx_files = glob.glob(os.path.join(path, 'example*.xlsx'))
    xlsx_files_sorted = sorted(xlsx_files, key=str.lower)
    return xlsx_files_sorted

def main():
    xlsx_files = get_all_xlsx_files('../attaches')
    wb = merge_xlsx_files(xlsx_files)
    wb.save('merge_result.xlsx')


if __name__ == '__main__':
    main()

3.2 计算平均分和总分

import openpyxl

def process_worksheet(sheet):
    min_col = sheet.max_column + 1
    max_col = sheet.max_column + 2

    for row in sheet.iter_rows(min_row=2, min_col=3):
        scores = [cell.value for cell in row]
        sum_score = sum(scores)
        avg_scores = int(sum_score / len(scores))

        sheet.cell(row=row[0].row, column=min_col).value = sum_score
        sheet.cell(row=row[0].row, column=max_col).value = avg_scores

    sheet.cell(row=1,column=min_col).value = 'sum'
    sheet.cell(row=1,column=max_col).value = 'avg'

def main():
    wb = openpyxl.load_workbook('../attaches/example.xlsx')
    sheet = wb.get_sheet_by_name('student')
    process_worksheet(sheet)
    wb.save('example_huizong.xlsx')


if __name__ == '__main__':
    main()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值