Python xlrd和xlwt操作Excel实现自动化

简介: Python xlrd和xlwt操作Excel实现自动化

一、7大库优缺点对比

库名称 功能描述 优缺点

openpyxl 读写Excel 的xlsx/xlsm/xltm/xltx文件 简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等功能应有尽有;缺点是对VBA的支持不够好,读取文件效率较其他库低。

xlutils xlrd/xlwt 老牌Python包 xlrd:读xls/xlsx xlwt:写xls xlutils=xlrd+xlwt 读写效率高,功能单一;不支持写xlsx文件

xlsxwriter 创建xlsx文件 支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl相似,优点是相比openpyxl还支持VBA文件导入,缺点是不能打开/修改已有文件

win32com 不仅可以处理Excel,还可以处理office;该库不单独存在,可以通过安装pywin32获取。 相当于是windows COM的封装,自身并没有很完善的文档,新手使用会有点痛苦。

xlwings 支持xls读,xlsx读写。可结合VBA实现对Excel编程 支持numpy array 和pandas DataFrame数据类型。除读写等基本操作外,大部分功能通Win32 COM PAI 实现。

pandas Pandas 将Excel作为输入/输出数据的容器。数据处理才是pandas的主要用途。 读取xls调用xlrd,读取xlsx调用xlrd或openpyxl。写入Excel调用openpyxl或xlswriter。

Microsoft Excel API 直接与Excel进程通信 需安装pywin32,可以做任何在Excel里可以做的事情,但比较慢。

二、xlrd读取Excel表

xlrd读取Excel表数据非常快,支持.xls和.xlsx

1、安装xlrd模块

pip install xlrd

6a5917843a3dc26486f8a714029fc92.png

2、xlrd读取Excel表

1)打开Excel表

a10f8c7a1b0ed682d9a5bf408fabcd1.png

错误:

9757622f186b7af4ef9f7f256d5ba1d.png

xlrd-2.0.1不支持xlsx,需要卸载,安装1.2版本,需要自行解决

pip install xlrd=1.2.0

2)获取全部表名

eabcc88920d1df576ef269c36b1c90f.png

import xlrd
#打开文件
wb = xlrd.open_workbook("test.xls")
list_name = wb.sheet_names()
print(list_name)

3)指定sheet表

c9db2974ea8ec2204b01cad2fdd2bb8.png

import xlrd
#打开文件
wb = xlrd.open_workbook("test.xls")
#按名称指定
sheet1 = wb.sheet_by_name('test')
print(sheet1)
#按索引指定,索引是从0开始计算
sheet2 = wb.sheet_by_index(0)
print(sheet2)

4)sheet表的行操作

参数列表:行数rowx从0开始算起,不包含结束列end_colx,默认值None

方法 说明

Sheet.nrows 获取该sheet中的有效行数

Sheet.row(rowx) 获取sheet中的第rowx行数据 行数rowx从0开始算起

Sheet.row_slice( rowx=*, start_colx=0, end_colx=None) 获取sheet中rowx行指定列(开始列start_colx,结束列end_colx前)的数据(包含了数据类型) 行数rowx从0开始算起,不包含结束列end_colx

Sheet.row_values(rowx=*, start_colx=0, end_colx=None) 获取sheet中rowx行指定列(开始列start_colx,结束列end_colx前)的数据(不包含数据类型) 行数rowx从0开始算起,不包含结束列end_colx

Sheet.row_len(rowx) 获取第rowx行的有效单元格长度

c03be5cc12aee902a2d6f317cf323b7.png

import xlrd
# 打开文件
wb = xlrd.open_workbook("test.xls")
# 通过sheet索引获得sheet对象
sheet = wb.sheet_by_index(0)
print(sheet)
# 获取该表总行数
nrows = sheet.nrows
print("总行数是:", nrows)
# 显示单行数据,索引从0开始计算
print(sheet.row(0))
# sheet.row(0) == sheet.row_slice(0)   效果相同
print(sheet.row_slice(0))
# 显示单行数据 索引从0开始计算
print(sheet.row_values(1))
# rowx第几行,start_colx从第几列开始,第几列结束 默认值end_colx=None
print(sheet.row_values(rowx=2, start_colx=0, end_colx=1))
# 行的有效长度
print("行的有效长度:", sheet.row_len(0))
# 循环打印里面所有数据
for i in range(nrows):
    print(sheet.row_values(i))

5)sheet表的列操作

参数列表 列数colx从0开始算起,不包含结束行end_rowx,默认值None

方法 说明

Sheet.ncols 获取某sheet中的有效列数

Sheet.col()或Sheet.col_slice(colx, start_rowx=0, end_rowx=None) 获取sheet中第colx列从start_rowx行到end_rowx行的数据(包含了数据类型)

Sheet.col_values(self, colx, start_rowx=0, end_rowx=None) 获取sheet中第colx列从start_rowx行到end_rowx行的数据(不包含数据类型)

4668654bbf104c1e65eda16735fb50d.png

import xlrd
# 打开文件
wb = xlrd.open_workbook("test.xls")
# 通过sheet索引获得sheet对象
sheet = wb.sheet_by_index(0)
print(sheet)
# 获取该表总列数
ncols = sheet.ncols
print("总列数是:", ncols)
# 显示单列数据,索引从0开始计算
print(sheet.col(0))
# sheet.col(0) == sheet.col_slice(0)   效果相同
# 带列名
print(sheet.col_slice(0))
print("=" * 40)
# 不带列名
print(sheet.col_slice(0, 1))
print("=" * 40)
# 循环打印里面所有数据
for i in range(ncols):
    print(sheet.col_values(i))

三、xlwt写入Excel表

xlwt写入Excel表数据,支持.xls和.xlsx

1、安装xlwt包

pip install xlwt

f38ff25bfa845cd1771e2b9950d8c1c.png

2、写入单条数据

6cb7d08d92743ff7d5d37d03b29fa57.png

526a5a6d5495836565a78f63c7e4c9d.png

import xlwt
# 创建Excel对象 并指定编码格式
ws = xlwt.Workbook(encoding='utf-8')
# 创建sheet表
sheet = ws.add_sheet('sheet1')
# 第一个参数是行
# 第二个参数是列
# 第三个参数需要写入的内容
sheet.write(0, 0, 'python')
# 保存数据名字和格式
ws.save('test1.xls')
# 保存正常,但是打开报错,后续在解决
ws.save('test2.xlsx')

3、多条数据写入

import xlwt
# 定义写入数据
data_list = [("张三", 35, '男'), ('李四', 32, '男'), ('凤姐', 33, '女'), ('小明', 12, '男')]
# 创建Excel对象 并指定编码格式
ws = xlwt.Workbook(encoding='utf-8')
# 创建sheet表
sheet = ws.add_sheet('sheet1')
# 自定义列名表头
col_name = ('姓名', '年龄', '性别')
# 循环写入sheet表单第一行
for i in range(0, len(col_name)):
    sheet.write(0, i, col_name[i])
# 循环写入数据
for i in range(0, len(data_list)):
    data = data_list[i]
    for j in range(0, len(col_name)):
        sheet.write(i + 1, j, data[j])
ws.save('test1.xls')

结果:

c3863c2be50fc14e1a2d20db3366f57.png

4、设置宽度和高度

sheet.col(“行索引”).width = 256 * 24

sheets.row(“行索引”).height_mismatch = True 默认行高是和文字的高度进行匹配的,即 值是 False,我们设置行高不会生效

sheets.row(“行索引”).height = 20*20 # 其中一个20代表单位,想要行高是多少乘以多少就行了。

import xlwt
# 定义写入数据
data_list = [("张三", 35, '男'), ('李四', 32, '男'), ('凤姐', 33, '女'), ('小明', 12, '男')]
# 创建Excel对象 并指定编码格式
ws = xlwt.Workbook(encoding='utf-8')
# 创建sheet表
sheet = ws.add_sheet('sheet1')
# 自定义列名表头
col_name = ('姓名', '年龄', '性别')
# 循环写入sheet表单第一行
for i in range(0, len(col_name)):
    # 设置宽度
    sheet.col(i).width = 256 * 24
    # 设置高度
    sheet.row(i).height_mismatch = True
    sheet.row(i).height = 20*20
    sheet.write(0, i, col_name[i])
# 循环写入数据
for i in range(0, len(data_list)):
    data = data_list[i]
    for j in range(0, len(col_name)):
        sheet.write(i + 1, j, data[j])
        # 设置高度
        sheet.row(i+1).height_mismatch = True
        sheet.row(i+1).height = 20*20
ws.save('test1.xls')

db4e9a1a3678c56803b32edbb1aa803.png

5、自定义单元格样式

参数说明:

参数 说明

xlwt.Font() 字体设置

xlwt.Patter() 背景设置

xlwt.Borders() 边框设置

xlwt.Alignment() 对准设置

import xlwt

# 定义写入数据
data_list = [("张三", 35, '男'), ('李四', 32, '男'), ('凤姐', 33, '女'), ('小明', 12, '男')]
# 创建Excel对象 并指定编码格式
ws = xlwt.Workbook(encoding='utf-8')
# 创建sheet表
sheet = ws.add_sheet('sheet1')
# 实例化表格样式对象
xstyle = xlwt.XFStyle()
# 设置字体样式
xfont = xlwt.Font()
xfont.colour_index = 0x04  # 设置字体颜色
xfont.bold = True  # 字体加粗
xfont.height = 20 * 18  # 设置字体高度(20是基数不变,18是字号用于调整大小)
xfont.underline = 0x01  # 设置字体带下划线
xfont.name = '华文彩云'  # 设置字体
# 将字体对象赋值给样式对象
xstyle.font = xfont
# 自定义列名表头
col_name = ('姓名', '年龄', '性别')
# 循环写入sheet表单第一行
for i in range(0, len(col_name)):
    # 设置宽度
    sheet.col(i).width = 256 * 24
    # 设置高度
    sheet.row(i).height_mismatch = True
    sheet.row(i).height = 20 * 20
    sheet.write(0, i, col_name[i], style=xstyle)
# 循环写入数据
for i in range(0, len(data_list)):
    data = data_list[i]
    for j in range(0, len(col_name)):
        sheet.write(i + 1, j, data[j], style=xstyle)
        # 设置高度
        sheet.row(i + 1).height_mismatch = True
        sheet.row(i + 1).height = 20 * 20
ws.save('test1.xls')

87f162ea2b8b4dd99c0ea9e6cccdff3.png

相关文章
|
10月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
1754 10
|
5月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据分析,别再死磕Excel了!
Python数据分析,别再死磕Excel了!
208 2
|
10月前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
843 61
自动化微信朋友圈:Python脚本实现自动发布动态
|
8月前
|
机器学习/深度学习 存储 数据可视化
这份Excel+Python飞速搞定数据分析手册,简直可以让Excel飞起来
本书介绍了如何将Python与Excel结合使用,以提升数据分析和处理效率。内容涵盖Python入门、pandas库的使用、通过Python包操作Excel文件以及使用xlwings对Excel进行编程。书中详细讲解了Anaconda、Visual Studio Code和Jupyter笔记本等开发工具,并探讨了NumPy、DataFrame和Series等数据结构的应用。此外,还介绍了多个Python包(如OpenPyXL、XlsxWriter等)用于在无需安装Excel的情况下读写Excel文件,帮助用户实现自动化任务和数据处理。
|
9月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
11月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
664 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
10月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
11月前
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。
|
11月前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
419 3
|
11月前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。

推荐镜像

更多
下一篇
oss教程