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

devtools/2025/1/18 12:28:53/


引言
 
在当今数字化办公的大环境下,日常工作中处理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的组合都将成为不可或缺的工具。


http://www.ppmy.cn/devtools/151557.html

相关文章

【Delete 删除数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录前言 🍃一、根据实体删除1.1 强类型实体2.2 无主键实体删除2.3 Object、接口、抽象类 删除 二、根据主键三…

WPS计算机二级•高效操作技巧

听说这里是目录哦 斜线表头 展示项目名称🍋‍🟩横排转竖排🍐批量删除表格空白行🍈方法一方法二建辅助列找空值 能量站😚 斜线表头 展示项目名称🍋‍🟩 选中单元格,单击右键➡️“设…

macos arm 本地/docker/本地k8s 安装jupyterhub 并登陆

概述 很多文章写的启动官方docker镜像后,新建linux用户即可直接登录,不知道是否版本原因,总之目前最新版我亲测不可以,踩坑两天,这里记录下解决过程,以及各种细节在文档中的位置.以及为什么官方镜像不能直接使用的原因. part1 本地安装jupyterhub https://jupyterhub.readth…

无公网IP 实现外网访问本地 Docker 部署 Navidrome

Navidrome 是一款可以在 macOS、Linux、Windows以及 Docker 等平台上运行的跨平台开源音乐服务器应用,它支持传输常见的 MP3、FLAC、WAV等音频格式。允许用户通过 Web 界面或 API 进行音乐库的管理和访问。本文就介绍如何快速在 Linux 系统使用 Docker 进行本地部署…

iis强制重定向https

以下是在 IIS 10 中配置将 HTTP 请求的 403 错误重定向到 HTTPS 的步骤: 0.选择站点,ssl设置,勾选“要求sll”,下边忽略。 打开 IIS 管理器。 选择您要配置的网站。 在 “功能视图” 中,双击 “错误页”。 在 “错误…

(8)ERC20详细介绍

ERC20 是以太坊上的一种代币标准(同质化代币),由 Fabian Vogelsteller 在 2015 年提出。它定义了一组通用的接口和规则,使得开发者可以创建可互操作的代币。ERC20 代币在以太坊生态系统中非常流行,广泛应用于各种去中心…

STM32三导联蓝牙心电监护仪设计,C#上位机显示波形 附源码与电路和论文

资料下载地址:STM32三导联蓝牙心电监护仪设计,C#上位机显示波形 附源码与电路和论文 目录 摘要 1. 引言 2. 系统方案 3. 系统硬件设计 3.1 系统原理框图设计 3.2 系统主要元器件介绍 3.2.1 STM32F103VET6主控芯片 3.2.2 AD8232模拟前…

宇泰串口卡驱动在Ubuntu22.04编译、安装汇总

从官网下载驱动官网地址 上传到Ubuntu, 目录结构如下: 驱动源代码: 驱动代码是基于开源项目编译来的 编译路径不能有中文路径,否则可能有类似错误 源码是基于Linux2.3内核编译,我当前是6.8.0-51,数据结构有升级,需要调…