Python 进阶【三】:Excel操作

article/2025/8/27 19:07:46

1. 概述与库介绍

1.1 Excel自动化的重要性

在数据处理领域,Excel是最常用的工具之一。手动操作Excel对于小规模数据和简单任务尚可,但当面对:

  • 大规模数据集
  • 重复性操作
  • 复杂计算和分析
    时,手动操作效率低下且容易出错。Python提供了多种强大的库来自动化这些流程。

1.2 Python操作Excel的主要库

库名称功能特点支持格式安装命令
xlrd读取Excel数据xls/xlsxpip install xlrd
xlwt写入Excel数据xlspip install xlwt
xlutilsExcel实用工具xlspip install xlutils
XlsxWriter高级写入功能,支持图表xlsxpip install XlsxWriter
openpyxl完整读写功能xlsxpip install openpyxl

1.3 环境准备

pip install xlrd xlwt xlutils XlsxWriter openpyxl

2. 基础写入操作

2.1 使用xlwt创建简单表格

import xlwt
from datetime import datetime# 创建工作簿
wb = xlwt.Workbook()# 添加工作表
sh = wb.add_sheet('员工信息')# 设置样式
style_header = xlwt.XFStyle()
font_header = xlwt.Font()
font_header.bold = True
style_header.font = font_headerstyle_data = xlwt.XFStyle()
style_data.num_format_str = 'YYYY-MM-DD'  # 日期格式# 创建默认样式(无特殊格式)
style_default = xlwt.XFStyle()# 写入表头
headers = ['ID', '姓名', '部门', '入职日期', '薪资']
for col, header in enumerate(headers):sh.write(0, col, header, style_header)# 写入数据
employees = [[1, '张三', '技术部', datetime(2020,5,15), 15000],[2, '李四', '市场部', datetime(2019,8,22), 12000],[3, '王五', '财务部', datetime(2021,3,10), 13500]
]for row, emp in enumerate(employees, start=1):for col, value in enumerate(emp):# 使用三元表达式选择样式current_style = style_data if col == 3 else style_defaultsh.write(row, col, value, current_style)# 保存文件
wb.save('employee_info.xls')
print("员工信息表已成功创建")

在这里插入图片描述

2.2 使用XlsxWriter创建带图表的报表

import xlsxwriter# 创建工作簿
wb = xlsxwriter.Workbook('sales_report.xlsx')
ws = wb.add_worksheet('季度销售')# 定义格式
fmt_header = wb.add_format({'bold': True, 'bg_color': '#4F81BD','font_color': 'white','align': 'center'
})# 数据
data = [['季度', '产品A', '产品B', '产品C'],['Q1', 150000, 200000, 180000],['Q2', 180000, 210000, 190000],['Q3', 220000, 180000, 210000]
]# 写入数据
for row_num, row_data in enumerate(data):ws.write_row(row_num, 0, row_data, fmt_header if row_num == 0 else None)# 创建图表
chart = wb.add_chart({'type': 'column'})
chart.add_series({'name': '=季度销售!$B$1','categories': '=季度销售!$A$2:$A$4','values': '=季度销售!$B$2:$B$4'
})
# 可添加更多系列...# 插入图表
ws.insert_chart('F2', chart)
wb.close()

在这里插入图片描述

3. 数据读取操作

3.1 使用xlrd读取数据

import xlrddef read_excel(file_path):wb = xlrd.open_workbook(file_path)sh = wb.sheet_by_index(0)print(f"工作表 '{sh.name}' 包含 {sh.nrows}{sh.ncols} 列")# 读取表头print("\n表头:", sh.row_values(0))# 读取数据print("\n数据样例:")for row in range(1, min(4, sh.nrows)):  # 只显示前3行数据print(sh.row_values(row))# 获取特定单元格print("\n特定单元格B2:", sh.cell_value(1, 1))read_excel('employee_info.xls')

3.2 使用openpyxl读取现代Excel

from openpyxl import load_workbookdef read_xlsx(file_path):wb = load_workbook(file_path)ws = wb.activeprint(f"\n读取 {file_path} 中的数据:")for row in ws.iter_rows(values_only=True):print(row)read_xlsx('sales_report.xlsx')

4. 数据修改与更新

4.1 使用xlutils修改现有文件

from xlrd import open_workbook
from xlutils.copy import copydef update_salary(file_path, raise_percent=0.1):# 打开文件并保留格式rb = open_workbook(file_path, formatting_info=True)wb = copy(rb)ws = wb.get_sheet(0)# 获取原数据sh = rb.sheet_by_index(0)# 更新薪资for row in range(1, sh.nrows):old_salary = sh.cell_value(row, 4)new_salary = old_salary * (1 + raise_percent)ws.write(row, 4, new_salary)# 添加备注ws.write(sh.nrows, 0, f"注:薪资已上调{raise_percent*100}%")# 保存new_file = file_path.replace('.xls', '_updated.xls')wb.save(new_file)print(f"\n文件已更新: {new_file}")update_salary('employee_info.xls')

4.2 使用openpyxl修改现代Excel

from openpyxl import load_workbook
from openpyxl.styles import Fontdef add_bonus(file_path, bonus=2000):wb = load_workbook(file_path)ws = wb.active# 添加新列ws['F1'] = "奖金"ws['F1'].font = Font(bold=True)# 填充奖金数据for row in range(2, ws.max_row + 1):ws[f'F{row}'] = bonus# 添加总计列ws['G1'] = "总计"for row in range(2, ws.max_row + 1):ws[f'G{row}'] = f'=E{row}+F{row}'wb.save(file_path.replace('.xlsx', '_with_bonus.xlsx'))add_bonus('sales_report.xlsx')

5. 高级功能示例

5.1 使用openpyxl创建专业报表

from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill
from openpyxl.chart import PieChart, Referencedef create_project_report():wb = Workbook()ws = wb.activews.title = "项目状态"# 设置样式header_font = Font(bold=True, color="FFFFFF")header_fill = PatternFill(start_color="4472C4", fill_type="solid")# 数据data = [["项目", "进度%", "状态"],["官网改版", 85, "进行中"],["APP开发", 65, "进行中"],["系统升级", 45, "延期"]]# 写入数据for row in data:ws.append(row)# 应用样式for cell in ws[1]:cell.font = header_fontcell.fill = header_fill# 创建饼图chart = PieChart()labels = Reference(ws, min_col=1, min_row=2, max_row=4)data = Reference(ws, min_col=2, min_row=2, max_row=4)chart.add_data(data, titles_from_data=False)chart.set_categories(labels)chart.title = "项目进度分布"ws.add_chart(chart, "E2")wb.save("project_status.xlsx")create_project_report()

6. 库对比与选择指南

功能对比表

功能需求推荐库原因说明
读取旧版Excel(.xls)xlrd专为读取xls设计
创建简单xls文件xlwt轻量级解决方案
修改现有xls文件xlutils能保留原格式
创建带图表的专业报表XlsxWriter图表功能强大
读写现代Excel文件openpyxl功能最全面
大数据量处理openpyxl只读模式内存效率高

常见问题解决方案

  1. 日期处理问题

    # xlrd读取日期(返回的是Excel日期数字)
    date_value = xlrd.xldate_as_datetime(cell_value, wb.datemode)# openpyxl直接读取datetime对象
    cell.value  # 直接返回Python datetime对象
    
  2. 公式计算

    # XlsxWriter写入公式
    worksheet.write_formula('A1', '=SUM(B1:B10)')# openpyxl刷新公式
    wb = load_workbook('file.xlsx', data_only=True)  # 获取计算后的值
    
  3. 性能优化

    # openpyxl只读模式处理大文件
    from openpyxl import load_workbook
    wb = load_workbook('large_file.xlsx', read_only=True)# openpyxl只写模式生成大文件
    wb = Workbook(write_only=True)
    

7. 最佳实践总结

  1. 项目开始前

    • 明确需要处理的Excel版本(xls还是xlsx)
    • 评估需要的功能(是否需要图表、条件格式等)
    • 考虑数据量大小
  2. 代码编写时

    • 封装常用操作为函数
    • 添加适当的异常处理
    • 编写清晰的注释
  3. 性能关键点

    • 批量操作优于单个单元格操作
    • 尽量减少样式设置
    • 大文件使用只读/只写模式
  4. 扩展学习

    # 使用pandas简化数据分析
    import pandas as pd
    df = pd.read_excel('data.xlsx')  # 读取
    df.to_excel('output.xlsx')  # 写入
    

通过本指南,您应该已经掌握了Python操作Excel的完整技能栈,能够根据不同的项目需求选择合适的工具和方法,实现Excel处理的自动化,大大提高工作效率。


http://www.hkcw.cn/article/ZqgBhAlllR.shtml

相关文章

Oracle RMAN自动恢复测试脚本

说明 此恢复测试脚本,基于rman备份脚本文章使用的fullbak.sh做的备份。 数据库将被恢复到RESTORE_LO参数设置的位置。 在恢复完成后,执行一个测试sql,确认数据库恢复完成,数据库备份是好的。恢复测试数据库的参数,比如SGA大小都…

亚马逊桌布运营中的利润核算与优化:从成本管控到决策升级

在亚马逊电商市场,卖家运营面临利润核算与决策难题。​ 一、卖家运营核心痛点 (一)利润核算复杂性 亚马逊费用体系复杂:平台销售佣金因类目而异,FBA 费用包含仓储、配送等项目,且随淡旺季、仓储时长动态…

C# Costura.Fody 排除多个指定dll

按照网上的说在 FodyWeavers.xml 里修改 然后需要注意的是 指定多个排除项 不是加 | 是换行 一个换行 就排除一项 我测试的 <?xml version"1.0" encoding"utf-8"?> <Weavers xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&quo…

设计模式-发布订阅

文章目录 发布订阅概念发布订阅 vs 监听者例子代码 发布订阅概念 发布/订阅者模式最大的特点就是实现了松耦合&#xff0c;也就是说你可以让发布者发布消息、订阅者接受消息&#xff0c;而不是寻找一种方式把两个分离 的系统连接在一起。当然这种松耦合也是发布/订阅者模式最大…

算法第32天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数 题目 思路与解法 class Solution:def fib(self, n: int) -> int:fib [1] * nif n 0:return 0if n 1 or n 2 :return 1for i in range(2, n):fib[i] fib[i-1] fib[i-2]return fib[n-1]70. 爬楼梯 题目 思路与解法 class Solution:def climbStairs(…

涂鸦智能的TuyaOpen框架入门指南:智能插座实战

目录 引言 TuyaOpen框架简介 程序下载和编译 安装依赖 克隆仓库 设置与编译 step1. 设置环境变量 step2. 选择待编译项目 step3. 编译 step4. menuconfig 配置 在Ubuntu上测试示例程序Switch Demo 创建产品并获取产品的 PID 确认 TuyaOpen 授权码 运行程序 程序…

快速上手shell条件测试

一、命令执行结果判定 && 命令执行后如果没有任何报错时会执行符号后面的动作 || 在命令执行后如果命令有报错会执行符号后的动作 二、条件判断方法 条件测试语法说明示例test 测试表达式test命令和 测试表达式 之间至少有一个空格[ 测试表达式 ]该方法和test命令的…

每日刷题c++

快速幂 #include <iostream> using namespace std; #define int long long int power(int a, int b, int p) {int ans 1;while (b){if (b % 2){ans * a;ans % p; // 随时取模}a * a;a % p; // 随时取模b / 2;}return ans; } signed main() {int a, b, p;cin >> a …

什么是node.js、npm、vue

一、Node.js 是什么&#xff1f; &#x1f63a; 定义&#xff1a; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境&#xff0c;让你可以在浏览器之外运行 JavaScript 代码&#xff0c;主要用于服务端开发。 &#x1f63a;从计算机底层说&#xff1a;什么是“运…

华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

webrtc初了解

1. webrtc的简介 一、WebRTC 是什么&#xff1f; Web Real-Time Communication&#xff08;网页实时通信&#xff09;&#xff0c;是浏览器原生支持的实时音视频通信技术&#xff0c;无需安装插件或客户端&#xff0c;可直接在浏览器之间实现点对点&#xff08;P2P&#xff09…

【Deepseek 学网络互联】跨节点通信global 和节点内通信CLAN保序

Clan模式下的源端保序与Global类似&#xff0c;目的端保序则退化成通道保序&#xff0c;此时仅支持网络单路径保序。”这里的通道保序怎么理解&#xff1f; 用户可能正在阅读某种硬件架构文档&#xff08;比如NVIDIA的NVLink或InfiniBand规范&#xff09;&#xff0c;因为"…

​Windows 11 安装 Miniconda 与 Jupyter 全流程指南​

​一、Miniconda 安装与配置​ 1. 下载安装程序 ​访问官网​&#xff1a;打开 Miniconda 官网&#xff0c;下载 ​Python 3.x 版本的 Windows 64 位安装包​。​安装路径选择​&#xff1a; 推荐路径&#xff1a;D:\Miniconda3&#xff08;避免使用中文路径和空格&#xff0…

飞牛NAS+Docker技术搭建个人博客站:公网远程部署实战指南

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress总结 前言 在数字化浪潮中&#xff0c;传统网站搭建方式正面临前所未…

批目标灵活模拟!成都鼎讯雷达模拟器,打造沉浸式雷达对抗训练场景

在现代战争的电磁频谱博弈中&#xff0c;能否构建高度逼真的雷达干扰与目标环境&#xff0c;直接决定着雷达装备性能的上限与作战人员的实战能力。成都鼎讯凭借在数字射频存储&#xff08;DRFM&#xff09;、数字干扰调制&#xff08;DJS&#xff09;等前沿技术的深厚积累&…

GelSight Mini触觉传感器:7μm精度+3D 映射,赋能具身智能精密操作

GelSight Mini 高分辨率视触觉传感器采用先进的光学成像与触觉感知技术&#xff0c;赋予机器人接近人类的触觉能力。该设备可捕捉物体表面微观细节&#xff0c;并生成高精度的2D/3D数字映射&#xff0c;帮助机器人识别形状、纹理及接触力&#xff0c;从而执行更复杂、精准的操作…

【机器学习基础】机器学习入门核心算法:随机森林(Random Forest)

机器学习入门核心算法&#xff1a;随机森林&#xff08;Random Forest&#xff09; 1. 算法逻辑2. 算法原理与数学推导2.1 核心组件2.2 数学推导2.3 OOB&#xff08;Out-of-Bag&#xff09;误差 3. 模型评估评估指标特征重要性可视化 4. 应用案例4.1 医疗诊断4.2 金融风控4.3 遥…

Nacos 配置管理案例:nacos-spring-cloud-config-example详解

一、结构说明&#xff1a;基于Spring Cloud Alibaba的微服务示例 nacos-spring-cloud-config-example : 服务提供者 二、技术栈&#xff1a;Spring BootSpring CloudSpring Cloud Alibaba Nacos Actuator&#xff08;可选&#xff1a;监控&#xff09; 三、使用环境 安装…

Python训练营---Day39

知识点回顾 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 作业&#xff1a;今日代码较少&#xff0c;理解内容即可 1、图像数据的格式&#xff1a;灰度和彩色数…

KeePass安装与KeePass设置中文教程

一、下载KeePass 访问官网&#xff1a;https://keepass.info 1&#xff0c;点击最新版本 2&#xff0c;下载最新版本 3&#xff0c;选择你要下载的版本 二、安装KeePass 1&#xff0c;第一步 2&#xff0c;第二步&#xff08;一直点Next&#xff09; 3&#xff0c;安装…