首页 > 编程语言 >Python与Excel:开启自动化办公新时代 

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

时间:2025-01-19 16:31:37浏览次数:3  
标签:count sheet openpyxl Python Excel 办公 workbook occupation row


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

标签:count,sheet,openpyxl,Python,Excel,办公,workbook,occupation,row
From: https://blog.csdn.net/qq_57128262/article/details/145166352

相关文章

  • 【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
    【华为OD-E卷-第k个排列100分(python、java、c++、js、c)】题目给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!种排列。按大小顺序升序列出所有排列的情况,并一一标记,当n=3时,所有排列如下:“123”“132”“213”“231”“312”“321”给......
  • python图书管理系统
    效果展示概述本教程将引导你构建一个基于Python的图书管理系统,该系统使用Tkinter作为图形用户界面(GUI),并利用SQLite数据库存储和管理图书信息。通过本教程,你将学习如何实现添加、编辑、删除以及查询图书的功能。准备工作确保你的计算机上安装了Python3.x版本。由于我们......
  • 【华为OD-E卷 - 最长连续子序列 100分(python、java、c++、js、c)】
    【华为OD-E卷-最长连续子序列100分(python、java、c++、js、c)】题目有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度,如果没有满足要求的序列,返回-1输入描述第一行输入是:N个正整数组成的一个序列第二行输入是:给定......
  • 【华为OD-E卷 - 找出两个整数数组中同时出现的整数 100分(python、java、c++、js、c)】
    【华为OD-E卷-找出两个整数数组中同时出现的整数100分(python、java、c++、js、c)】题目现有两个整数数组,需要你找出两个数组中同时出现的整数,并按照如下要求输出:有同时出现的整数时,先按照同时出现次数(整数在两个数组中都出现并目出现次数较少的那个)进行归类,然后按照出......
  • 【华为OD-E卷 - 计算疫情扩散时间 100分(python、java、c++、js、c)】
    【华为OD-E卷-计算疫情扩散时间100分(python、java、c++、js、c)】题目在一个地图中(地图由n*n个区域组成),有部分区域被感染病菌。感染区域每天都会把周围(上下左右)的4个区域感染。请根据给定的地图计算,多少天以后,全部区域都会被感染。如果初始地图上所有区域全部都被感......
  • Python 项目和Pytorch 项目的环境构建
    python项目环境搭建首先下载软件包,打开安装创建项目:点击主菜单新建项目位置+pythonProject1构建python环境condecreate–p.envpython=3.10解释器:文件设置解释器本地解释器现有调试运行pytorch项目环境搭建先检查版本pip--version首先下载anaconda安装包这里......
  • python毕设婚纱影楼管理平台程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于婚纱影楼管理平台的研究,现有研究主要以传统管理模式为主,专门针对基于Python构建婚纱影楼管理平台的研究较少。在国内外,婚纱影楼行......
  • 基于粒子群优化算法的计及需求响应的风光储能微电网日前经济调度(Python代码实现)
    目录0引言1计及风光储能和需求响应的微电网日前经济调度模型1.1风光储能需求响应都不参与的模型1.2风光参与的模型1.3风光和储能参与模型1.4风光和需求响应参与模型1.5风光储能和需求响应都参与模型 2需求侧响应评价2.1 负载率2.2可再生能源消纳率2.3用户......
  • 【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)
    ......
  • 使用 Python 开发一个 AI Agent 自媒体助手示例
    1.项目背景随着自媒体行业的快速发展,内容创作者需要处理大量重复性任务,例如撰写文章、生成标题、优化关键词、分析数据等。通过开发一个AIAgent自媒体助手,可以帮助创作者高效完成这些任务,节省时间并提升内容质量。本文将展示如何使用Python构建一个简单的AIAgent......