Python办公自动化:使用`xlutils` 修改Excel文档

在日常办公自动化中,除了读取Excel文件,我们还经常需要对文件进行修改或更新。在Python中,除了xlrd,还可以使用xlutils库来实现对Excel文件的修改操作。本文将继续以"巴黎奥运会奖牌榜.xlsx"文件为例,讲解如何使用xlrdxlutils进行Excel文件的修改操作。

一、安装 xlutilsxlrd

在开始之前,确保已安装xlutilsxlrd库:

bash 复制代码
pip install xlutils xlrd==1.2.0

注意:由于xlrd库的更新,建议使用1.2.0版本以确保对.xlsx文件的兼容性。

二、导入必要的库

我们需要导入xlrd用于读取Excel文件,并使用xlutils中的copy模块来复制并修改Excel文件。

python 复制代码
import xlrd
from xlutils.copy import copy
三、读取和复制工作簿

首先,我们将读取原始Excel文件,并使用xlutils.copy将其复制为一个可写的工作簿。

python 复制代码
# 打开Excel文件
file_path = '/mnt/data/巴黎奥运会奖牌榜.xlsx'
workbook = xlrd.open_workbook(file_path)

# 复制工作簿
workbook_copy = copy(workbook)

# 选择需要修改的工作表
sheet_copy = workbook_copy.get_sheet(0)  # 获取第一个工作表
四、修改工作簿:添加新数据

接下来,我们将向已有的工作表中添加两条新数据:

python 复制代码
# 新增数据
new_data = [
    [21, '伊朗', 3, 6, 3, 12],
    [22, '乌克兰', 3, 5, 4, 12]
]

# 获取当前工作表的行数,用于确定新数据的插入位置
current_row = workbook.sheet_by_index(0).nrows

# 添加新数据
for i, row in enumerate(new_data):
    for j, value in enumerate(row):
        sheet_copy.write(current_row + i, j, value)
五、新增工作簿:统计前20名奖牌总数

我们将创建一个新的工作簿,用于统计前20名的金牌、银牌、铜牌总数,并将其保存到新的文件中。

python 复制代码
# 创建新的工作簿
from xlwt import Workbook

new_workbook = Workbook()
new_sheet = new_workbook.add_sheet('奖牌统计')

# 统计前20名的奖牌总数
gold_total = sum(workbook.sheet_by_index(0).col_values(2)[1:21])
silver_total = sum(workbook.sheet_by_index(0).col_values(3)[1:21])
bronze_total = sum(workbook.sheet_by_index(0).col_values(4)[1:21])

# 写入统计结果
new_sheet.write(0, 0, '前20名金牌总数')
new_sheet.write(0, 1, gold_total)
new_sheet.write(1, 0, '前20名银牌总数')
new_sheet.write(1, 1, silver_total)
new_sheet.write(2, 0, '前20名铜牌总数')
new_sheet.write(2, 1, bronze_total)

# 保存新的工作簿
new_file_path = '/mnt/data/巴黎奥运会奖牌统计.xls'
new_workbook.save(new_file_path)
六、保存修改后的Excel文件

完成上述操作后,我们需要保存修改后的原始文件:

python 复制代码
# 保存修改后的文件
modified_file_path = '/mnt/data/修改后的巴黎奥运会奖牌榜.xls'
workbook_copy.save(modified_file_path)
七、完整代码示例

以下是完整的代码示例,涵盖了所有操作:

python 复制代码
import xlrd
from xlutils.copy import copy
from xlwt import Workbook

# 打开Excel文件
file_path = '/mnt/data/巴黎奥运会奖牌榜.xlsx'
workbook = xlrd.open_workbook(file_path)

# 复制工作簿
workbook_copy = copy(workbook)
sheet_copy = workbook_copy.get_sheet(0)

# 新增数据
new_data = [
    [21, '伊朗', 3, 6, 3, 12],
    [22, '乌克兰', 3, 5, 4, 12]
]
current_row = workbook.sheet_by_index(0).nrows
for i, row in enumerate(new_data):
    for j, value in enumerate(row):
        sheet_copy.write(current_row + i, j, value)

# 创建新的工作簿并统计前20名奖牌总数
new_workbook = Workbook()
new_sheet = new_workbook.add_sheet('奖牌统计')

gold_total = sum(workbook.sheet_by_index(0).col_values(2)[1:21])
silver_total = sum(workbook.sheet_by_index(0).col_values(3)[1:21])
bronze_total = sum(workbook.sheet_by_index(0).col_values(4)[1:21])

new_sheet.write(0, 0, '前20名金牌总数')
new_sheet.write(0, 1, gold_total)
new_sheet.write(1, 0, '前20名银牌总数')
new_sheet.write(1, 1, silver_total)
new_sheet.write(2, 0, '前20名铜牌总数')
new_sheet.write(2, 1, bronze_total)

new_file_path = '/mnt/data/巴黎奥运会奖牌统计.xls'
new_workbook.save(new_file_path)

# 保存修改后的原始文件
modified_file_path = '/mnt/data/修改后的巴黎奥运会奖牌榜.xls'
workbook_copy.save(modified_file_path)

使用xlrdxlutils读取、修改Excel文件,并将数据保存到新的文件中。xlutils库在处理现有Excel文件的修改时非常有用,尤其是在不需要从头创建文件而只是简单地添加、修改或统计数据时。

相关推荐
小智RE0-走在路上14 分钟前
Python学习笔记(8) --函数的多返回值,不同传参,匿名函数
笔记·python·学习
ZHSH.28 分钟前
2026蓝桥杯备赛 | 赛事介绍及python基础(未完)
python·蓝桥杯·数据结构与算法
长安牧笛28 分钟前
设计残疾人出行路线规划工具,输入起点终点,自动筛选无障碍通道,电梯,盲道路线,避开台阶和陡坡。
python
程序员佳佳2 小时前
2025年大模型终极横评:GPT-5.2、Banana Pro与DeepSeek V3.2实战硬核比拼(附统一接入方案)
服务器·数据库·人工智能·python·gpt·api
刘某的Cloud2 小时前
列表、元组、字典、集合-组合数据类型
linux·开发语言·python
ys~~3 小时前
git学习
git·vscode·python·深度学习·学习·nlp·github
Mqh1807623 小时前
day46 Grad-CAM
python
郝学胜-神的一滴3 小时前
Python魔法函数一览:解锁面向对象编程的奥秘
开发语言·python·程序人生
白露与泡影3 小时前
使用systemd,把服务装进 Linux 心脏里~
linux·运维·python
yaoh.wang4 小时前
力扣(LeetCode) 100: 相同的树 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽