当前位置: 首页 > news >正文

Python 如何操作 Excel 文件(openpyxl, xlrd)

Python是处理Excel文件的一种非常强大且灵活的工具,尤其是通过使用openpyxlxlrd等库。openpyxl专注于Excel 2007及更高版本的.xlsx文件的创建、读取、修改和写入,而xlrd则主要用于读取早期版本的Excel文件(.xls),但自从2020年xlrd库不再支持.xlsx文件,因此它的主要用途现在局限于读取.xls文件。

一、安装库

在使用这些库之前,我们需要先安装它们。可以通过以下命令安装:

pip install openpyxl
pip install xlrd

openpyxl 是一个更现代的库,主要用于处理.xlsx格式的文件,而xlrd 在新版更新后仅支持.xls文件的读取操作。

二、openpyxl库的使用

1. 创建Excel文件

首先,我们可以通过openpyxl创建一个新的Excel文件,并向其中写入数据:

from openpyxl import Workbook# 创建一个新的工作簿
wb = Workbook()# 激活默认的工作表
ws = wb.active# 写入数据到工作表
ws['A1'] = 'Hello'
ws['B1'] = 'World'# 保存工作簿
wb.save("example.xlsx")

在上面的代码中,我们首先创建了一个工作簿,然后激活了默认的工作表,并向A1和B1单元格中写入了数据,最后将工作簿保存为example.xlsx

2. 读取Excel文件

openpyxl也可以用于读取现有的Excel文件:

from openpyxl import load_workbook# 加载已有的工作簿
wb = load_workbook("example.xlsx")# 选择活动工作表
ws = wb.active# 读取单元格数据
print(ws['A1'].value)  # 输出:Hello
print(ws['B1'].value)  # 输出:World

load_workbook()函数用于加载现有的工作簿,并返回一个Workbook对象,然后可以通过.active属性访问默认的工作表。

3. 操作工作表

openpyxl中,我们可以轻松地操作工作表,例如创建新的工作表、修改工作表名称、删除工作表等:

# 创建新工作表
ws1 = wb.create_sheet("NewSheet")# 修改工作表名称
ws1.title = "MySheet"# 删除工作表
wb.remove(ws1)# 或者使用 del 关键字
del wb["MySheet"]
4. 写入和修改数据

openpyxl允许我们使用不同的方式写入数据,除了通过单元格坐标,还可以通过遍历行和列的方式批量操作数据:

# 批量写入数据
for row in range(1, 10):for col in range(1, 5):ws.cell(row=row, column=col, value=f"Row {row}, Col {col}")# 修改单元格的值
ws['A1'] = 'Updated Value'

在上面的代码中,我们通过ws.cell()方法可以指定行和列,使用嵌套循环快速填充数据。

5. 单元格样式

除了读写数据外,openpyxl还支持修改单元格的样式,例如字体、边框、颜色等:

from openpyxl.styles import Font, Color, Alignment# 设置单元格字体
ws['A1'].font = Font(size=14, bold=True)# 设置单元格对齐方式
ws['A1'].alignment = Alignment(horizontal='center', vertical='center')# 设置单元格填充颜色
from openpyxl.styles import PatternFill
ws['A1'].fill = PatternFill("solid", fgColor="00FF00")

openpyxl.styles模块提供了丰富的样式选项,允许我们根据需求定制Excel文件的外观。

6. 处理公式

openpyxl还支持Excel中的公式。例如:

# 添加一个简单的加法公式
ws['C1'] = '=A1+B1'# 手动计算公式(注意:需要 Excel 应用程序打开此文件后才能真正计算)
wb.save("formula_example.xlsx")

虽然openpyxl可以写入和读取公式,但实际的计算需要Excel应用程序本身来执行。

三、xlrd库的使用

xlrd专注于读取Excel文件,特别是xls格式。虽然它不再支持读取xlsx文件,但对于处理旧版的Excel文件依然很有用。

1. 读取Excel文件

使用xlrd读取Excel文件非常简单:

import xlrd# 打开一个Excel文件
book = xlrd.open_workbook('example.xls')# 获取第一个工作表
sheet = book.sheet_by_index(0)# 读取单元格数据
print(sheet.cell_value(0, 0))  # 输出第1行第1列的数据

这里我们通过xlrd.open_workbook()函数打开了一个.xls文件,然后通过sheet_by_index()方法获取工作表,并通过sheet.cell_value()读取单元格的内容。

2. 获取工作表信息

xlrd可以帮助我们获取更多关于工作表的信息,例如行数、列数等:

# 获取工作表名称
print(sheet.name)# 获取工作表的行数和列数
print(sheet.nrows)
print(sheet.ncols)

这对于遍历整个表格的内容是非常有用的。

3. 遍历单元格数据

xlrd允许我们轻松遍历整个工作表中的数据:

# 遍历行数据
for row_idx in range(sheet.nrows):row = sheet.row(row_idx)for col_idx, cell in enumerate(row):print(f"({row_idx}, {col_idx}) = {cell.value}")

上面的代码示例展示了如何遍历工作表中的所有数据,逐行输出每个单元格的内容。

四、openpyxlxlrd的配合使用

在某些场景下,我们可能需要处理.xls.xlsx两种文件格式。这时,可以结合使用openpyxlxlrd。例如,我们可以使用xlrd读取.xls文件,然后使用openpyxl将其转换为.xlsx格式:

import xlrd
from openpyxl import Workbook# 使用xlrd打开xls文件
xls_book = xlrd.open_workbook('example.xls')
xls_sheet = xls_book.sheet_by_index(0)# 创建一个新的xlsx文件
wb = Workbook()
ws = wb.active# 将xls数据复制到xlsx
for row_idx in range(xls_sheet.nrows):for col_idx in range(xls_sheet.ncols):ws.cell(row=row_idx+1, column=col_idx+1, value=xls_sheet.cell_value(row_idx, col_idx))# 保存新的xlsx文件
wb.save('converted_example.xlsx')

这样,通过结合xlrdopenpyxl,我们可以轻松实现不同Excel格式之间的转换和处理。

openpyxl主要用于处理现代的.xlsx文件,而xlrd则用于读取老旧的.xls文件格式。通过结合这两个库,我们可以灵活地处理各种Excel文件格式,并根据需要进行数据转换和格式定制。

在实际应用中,根据文件格式的不同选择合适的库进行操作,可以提高代码的效率和兼容性。掌握这两个库的使用,将为数据处理和分析领域提供极大的便利。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于STM32开发的智能农业监测与控制系统
  • 【深度学习】迭代次数 vs bs? 迭代次数 vs epoch
  • Vue.js 样式绑定
  • Systemc example based on VCS
  • 专家系统的核心要点解析|专家系统|人工智能|知识工程
  • 【中仕公考是骗子吗】公务员联考是什么意思?
  • 线性代数基础
  • 基于ssm+vue+uniapp的图书管理系统小程序
  • 关于武汉芯景科技有限公司的实时时钟芯片XJ8340开发指南(兼容DS1340)
  • 【微服务】springboot整合对象映射工具MapStruct使用详解
  • 力扣刷题--137. 只出现一次的数字 II【中等】
  • FATE Board 执行流程探索
  • SpringBoot依赖之Spring Boot DevTools热部署开发增效工具
  • 编写测试用例的常用方法总结
  • Web安全:SQL注入实战测试.(扫描 + 测试)
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • AHK 中 = 和 == 等比较运算符的用法
  • Django 博客开发教程 8 - 博客文章详情页
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaScript函数式编程(一)
  • Rancher如何对接Ceph-RBD块存储
  • Spring框架之我见(三)——IOC、AOP
  • Tornado学习笔记(1)
  • vue 配置sass、scss全局变量
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • VuePress 静态网站生成
  • 阿里云购买磁盘后挂载
  • 第2章 网络文档
  • 判断客户端类型,Android,iOS,PC
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 收藏好这篇,别再只说“数据劫持”了
  • 网络应用优化——时延与带宽
  • 微信小程序设置上一页数据
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 怎样选择前端框架
  • 正则与JS中的正则
  • Java总结 - String - 这篇请使劲喷我
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • %@ page import=%的用法
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (06)Hive——正则表达式
  • (2)MFC+openGL单文档框架glFrame
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二)linux使用docker容器运行mysql
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (函数)颠倒字符串顺序(C语言)
  • (小白学Java)Java简介和基本配置
  • (新)网络工程师考点串讲与真题详解
  • *ST京蓝入股力合节能 着力绿色智慧城市服务