自学内容网 自学内容网

Python与Excel:开启自动化办公新时代 


引言
 
在当今数字化办公的大环境下,日常工作中处理Excel表格的任务愈发频繁且繁杂。传统的手动操作不仅耗时费力,还容易出错。而Python作为一门功能强大且应用广泛的编程语言,为我们实现Excel办公自动化提供了高效的解决方案。借助Python的丰富库和简洁语法,能够轻松完成诸如数据处理、报表生成、图表绘制等复杂任务,显著提升办公效率。
 
Python操作Excel的基础库——openpyxl
 
openpyxl库概述
 
 openpyxl  是Python中专门用于处理Excel文件(.xlsx格式)的强大库。它提供了直观且易于理解的API,使开发者能够方便地创建、读取、修改和保存Excel工作簿、工作表以及单元格数据。无论是简单的数据录入,还是复杂的数据处理和分析, openpyxl  都能胜任。
 
安装openpyxl
 
在开始使用  openpyxl  之前,需要确保它已经安装在Python环境中。通过pip包管理器,在命令行中执行以下简单命令即可完成安装:
 
pip install openpyxl
 
 
基本操作示例
 
创建新的Excel工作簿并写入数据
 
import openpyxl

# 创建工作簿
workbook = openpyxl.Workbook()
sheet = workbook.active

# 写入表头
headers = ['姓名', '年龄', '职业', '城市']
for col_num, header in enumerate(headers, 1):
    sheet.cell(row = 1, column = col_num, value = header)

# 模拟数据
data = [
    ['Alice', 25, 'Engineer', 'New York'],
    ['Bob', 30, 'Teacher', 'Los Angeles'],
    ['Charlie', 35, 'Doctor', 'Chicago']
]

# 写入数据
for row_num, row_data in enumerate(data, 2):
    for col_num, value in enumerate(row_data, 1):
        sheet.cell(row = row_num, column = col_num, value = value)

# 保存工作簿
workbook.save('employees.xlsx')
 
 
在上述代码中,首先创建了一个新的工作簿,并获取其活动工作表。然后,定义表头并将其写入第一行。接着,准备模拟数据并逐行逐列地将数据写入工作表中。最后,将工作簿保存为  employees.xlsx  文件。
 
读取Excel文件中的数据
 
import openpyxl

# 加载工作簿
workbook = openpyxl.load_workbook('employees.xlsx')
sheet = workbook.active

# 逐行读取数据并打印
for row in sheet.iter_rows(values_only = True):
    print(row)
 
 
此代码加载之前创建的  employees.xlsx  文件,并使用  iter_rows  方法逐行读取数据。 values_only = True  参数确保只返回单元格的值,而不是整个单元格对象,这样可以更方便地处理数据。
 
修改Excel文件中的数据
 
import openpyxl

# 加载工作簿
workbook = openpyxl.load_workbook('employees.xlsx')
sheet = workbook.active

# 修改特定单元格数据
sheet.cell(row = 2, column = 3, value = 'Programmer')

# 保存修改后的工作簿
workbook.save('employees_updated.xlsx')
 
 
这段代码加载Excel文件后,通过  cell  方法定位到特定单元格(第二行第三列),并修改其值为  Programmer 。最后,将修改后的工作簿另存为  employees_updated.xlsx 。
 
数据处理与分析
 
数据筛选
 
在实际工作中,常常需要根据特定条件筛选数据。例如,从员工数据中筛选出年龄大于30岁的员工。
 
import openpyxl

workbook = openpyxl.load_workbook('employees.xlsx')
sheet = workbook.active

filtered_data = []
for row in sheet.iter_rows(min_row = 2, values_only = True):
    name, age, occupation, city = row
    if age > 30:
        filtered_data.append(row)

print("年龄大于30岁的员工数据:")
for data in filtered_data:
    print(data)
 
 
上述代码从第二行开始遍历每一行数据,解包每行数据为姓名、年龄、职业和城市。通过条件判断筛选出年龄大于30岁的员工数据,并将其存储在  filtered_data  列表中,最后打印出来。
 
数据统计与计算
 
计算平均值
计算员工的平均年龄是常见的数据统计需求。
 
import openpyxl

workbook = openpyxl.load_workbook('employees.xlsx')
sheet = workbook.active

total_age = 0
count = 0
for row in sheet.iter_rows(min_row = 2, values_only = True):
    age = row[1]
    total_age += age
    count += 1

if count > 0:
    average_age = total_age / count
    print(f"员工的平均年龄为: {average_age}")
 
 
代码通过遍历每一行数据,累加年龄并统计员工数量。最后计算平均年龄并打印结果。
 
数据分组统计
假设需要统计不同职业的员工数量,可以使用Python的字典来实现。
 
import openpyxl

workbook = openpyxl.load_workbook('employees.xlsx')
sheet = workbook.active

occupation_count = {}
for row in sheet.iter_rows(min_row = 2, values_only = True):
    occupation = row[2]
    if occupation in occupation_count:
        occupation_count[occupation] += 1
    else:
        occupation_count[occupation] = 1

print("不同职业的员工数量统计:")
for occupation, count in occupation_count.items():
    print(f"{occupation}: {count}人")
 
 
在这个示例中,通过遍历每一行数据获取职业信息。利用字典  occupation_count  统计每种职业的员工数量,并最终打印统计结果。
 
图表创建与可视化
 
使用openpyxl创建图表
 
 openpyxl  不仅可以处理数据,还能创建简单的图表,使数据更加直观。以下以创建柱状图展示不同职业的员工数量为例。
 
import openpyxl
from openpyxl.chart import BarChart, Reference

workbook = openpyxl.load_workbook('employees.xlsx')
sheet = workbook.active

# 统计不同职业的员工数量
occupation_count = {}
for row in sheet.iter_rows(min_row = 2, values_only = True):
    occupation = row[2]
    if occupation in occupation_count:
        occupation_count[occupation] += 1
    else:
        occupation_count[occupation] = 1

# 将统计结果写入新的工作表
new_sheet = workbook.create_sheet('职业统计')
new_sheet.append(['职业', '数量'])
for occupation, count in occupation_count.items():
    new_sheet.append([occupation, count])

# 准备图表数据
data = Reference(new_sheet, min_col = 2, min_row = 1, max_col = 2, max_row = new_sheet.max_row)
categories = Reference(new_sheet, min_col = 1, min_row = 2, max_row = new_sheet.max_row)

# 创建柱状图
chart = BarChart()
chart.add_data(data, titles_from_data = True)
chart.set_categories(categories)
chart.title = '不同职业员工数量分布'
chart.x_axis.title = '职业'
chart.y_axis.title = '员工数量'

# 添加图表到工作表
new_sheet.add_chart(chart, 'D2')

# 保存工作簿
workbook.save('employees_with_chart.xlsx')
 
 
代码首先统计不同职业的员工数量,并将结果写入新的工作表。然后,通过  Reference  类定义图表的数据和类别。接着创建柱状图对象,设置图表的各种属性,如标题、坐标轴标题等。最后将图表添加到工作表中,并保存工作簿。
 
结合matplotlib进行更高级的可视化
 
虽然  openpyxl  能创建基本图表,但对于更复杂和美观的可视化需求, matplotlib  库是更好的选择。 matplotlib  是Python中广泛使用的绘图库,能够生成各种类型的高质量图表。
 
import openpyxl
import matplotlib.pyplot as plt

workbook = openpyxl.load_workbook('employees.xlsx')
sheet = workbook.active

# 统计不同职业的员工数量
occupation_count = {}
for row in sheet.iter_rows(min_row = 2, values_only = True):
    occupation = row[2]
    if occupation in occupation_count:
        occupation_count[occupation] += 1
    else:
        occupation_count[occupation] = 1

occupations = list(occupation_count.keys())
counts = list(occupation_count.values())

# 创建柱状图
plt.bar(occupations, counts)
plt.title('不同职业员工数量分布')
plt.xlabel('职业')
plt.ylabel('员工数量')
plt.xticks(rotation = 45)

# 显示图表
plt.show()
 
 
此代码同样先统计不同职业的员工数量,然后使用  matplotlib  的  bar  函数创建柱状图。设置图表的标题、坐标轴标签,并通过  xticks  函数旋转x轴标签以避免重叠。最后使用  show  函数显示图表。与  openpyxl  创建的图表相比, matplotlib  生成的图表更加美观和灵活,可进行更多的自定义设置。
 
批量处理与自动化流程
 
批量处理多个Excel文件
 
在实际工作中,可能需要处理多个Excel文件,例如合并多个员工信息表。
 
import openpyxl
import os

# 获取所有Excel文件路径
excel_files = [f for f in os.listdir('.') if f.endswith('.xlsx')]

# 创建新的工作簿用于合并数据
merged_workbook = openpyxl.Workbook()
merged_sheet = merged_workbook.active

# 写入表头
headers = ['姓名', '年龄', '职业', '城市']
for col_num, header in enumerate(headers, 1):
    merged_sheet.cell(row = 1, column = col_num, value = header)

# 逐文件读取数据并合并
for file in excel_files:
    workbook = openpyxl.load_workbook(file)
    sheet = workbook.active
    for row in sheet.iter_rows(min_row = 2, values_only = True):
        merged_sheet.append(row)

# 保存合并后的工作簿
merged_workbook.save('merged_employees.xlsx')
 
 
上述代码首先获取当前目录下所有的Excel文件路径。然后创建一个新的工作簿用于合并数据,并写入表头。接着遍历每个Excel文件,读取其中的数据并逐行追加到合并工作表中。最后保存合并后的工作簿。
 
自动化流程设置
 
通过结合Python的  schedule  库,可以设置定期执行的任务,实现自动化办公流程。例如,每天自动生成员工数据报表。
 
import schedule
import time
import openpyxl

def generate_daily_report():
    # 假设已有获取最新员工数据的逻辑,这里简单模拟数据
    new_data = [
        ['David', 28, 'Manager', 'Boston'],
        ['Eve', 22, 'Intern', 'Seattle']
    ]

    # 加载现有的员工数据工作簿
    workbook = openpyxl.load_workbook('employees.xlsx')
    sheet = workbook.active

    # 写入新数据
    for row_data in new_data:
        sheet.append(row_data)

    # 保存工作簿
    workbook.save('employees.xlsx')

    # 创建日报表工作簿
    daily_report_workbook = openpyxl.Workbook()
    daily_report_sheet = daily_report_workbook.active

    # 写入日报表表头
    headers = ['姓名', '年龄', '职业', '城市']
    for col_num, header in enumerate(headers, 1):
        daily_report_sheet.cell(row = 1, column = col_num, value = header)

    # 写入当天新数据
    for row_num, row_data in enumerate(new_data, 2):
        for col_num, value in enumerate(row_data, 1):
            daily_report_sheet.cell(row = row_num, column = col_num, value = value)

    # 保存日报表
    daily_report_workbook.save('daily_employee_report.xlsx')

# 设置每天凌晨1点执行任务
schedule.every().day.at("01:00").do(generate_daily_report)

while True:
    schedule.run_pending()
    time.sleep(1)
 
 
此代码定义了一个  generate_daily_report  函数,该函数模拟获取新的员工数据,并将其追加到现有的员工数据工作簿中。同时,创建一个日报表工作簿,将当天新数据写入其中并保存。通过  schedule.every().day.at("01:00").do(generate_daily_report)  设置每天凌晨1点执行该任务。 while True  循环和  schedule.run_pending()  确保任务按计划执行。
 
结语
 
Python与Excel的结合为办公自动化带来了无限可能。通过  openpyxl  等库,我们能够轻松实现Excel文件的各种操作,从数据处理、分析到可视化,再到批量处理和自动化流程设置。这不仅大大提高了工作效率,减少了人工错误,还为企业和个人在数据管理和决策方面提供了更强大的支持。随着技术的不断发展,Python在办公自动化领域的应用将更加广泛和深入,助力我们在数字化时代更高效地工作和生活。无论是小型企业的日常数据处理,还是大型公司的复杂报表生成,Python与Excel的组合都将成为不可或缺的工具。


原文地址:https://blog.csdn.net/qq_57128262/article/details/145166352

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!