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的组合都将成为不可或缺的工具。

相关推荐
恋恋西风19 分钟前
CT dicom 去除床板 去除床位,检查床去除
python·vtk·dicom·去床板
Doker 多克34 分钟前
Python Django系列—入门实例
python·django
geovindu1 小时前
python: SQLAlchemy (ORM) Simple example using mysql in Ubuntu 24.04
python·mysql·ubuntu
nuclear20111 小时前
Python 将PPT幻灯片和形状转换为多种图片格式(JPG, PNG, BMP, SVG, TIFF)
python·ppt转图片·ppt转png·ppt转jpg·ppt转svg·ppt转tiff·ppt转bmp
没有晚不了安1 小时前
1.13作业
开发语言·python
刀客1231 小时前
python小项目编程-中级(1、图像处理)
开发语言·图像处理·python
信阳农夫2 小时前
python 3.6.8支持的Django版本是多少?
python·django·sqlite
冷琴19962 小时前
基于Python+Vue开发的反诈视频宣传管理系统源代码
开发语言·vue.js·python
带娃的IT创业者2 小时前
《Python实战进阶》专栏 No2: Flask 中间件与请求钩子的应用
python·中间件·flask