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 = row1

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 = row2

if occupation in occupation_count:

occupation_countoccupation += 1

else:

occupation_countoccupation = 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 = row2

if occupation in occupation_count:

occupation_countoccupation += 1

else:

occupation_countoccupation = 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 = row2

if occupation in occupation_count:

occupation_countoccupation += 1

else:

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

相关推荐
笨鸟先飞,勤能补拙4 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能4 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂5 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study5 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境6 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境6 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1236 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102167 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb007 小时前
一个项目带你入门AI应用开发01
python
0566467 小时前
Python康复训练——常用标准库
开发语言·python·学习