openpyxl
xlrd/xlwt
xlwings
xlsxwriter
了解各个库的异同,从而在不同场景下可以灵活使用
首先让我们来整体把握下不同库的特点
“
xlrd
xlwt
xlutils
.xls
xlwt
.xls
xlrd
.xls
xlutils
xlrd
xlwt
.xls
xlrd
xlwt
xlutils
xlwings
XlsxWriter
.xlsx
openpyxl
.xlsx
pandas
”
如果你懒得看详细的对比过程,可以直接看最后的总结图,然后拉到文末收藏点赞就算学会了
非标准库
pip
多数模块可以直接通过名字导入,有些模块约定俗称会使用缩写:
import
import
import
as
import
import
import
as
xlutils
xlrd
xlwt
xlrd
.xls
xlwt
.xls
xlutils
xlrd
xlwt
copy
import
3.1 获取文件
并不是所有7个模块都可以读取 Excel 文件,而即使能读取Excel文件也要分不同后缀名进行讨论,具体如下:
“
xlwt
xlutils
XlsxWriter
xlrd
.xls
.xlsx
xlwings
.xls
.xlsx
openpyxl
.xlsx
pandas
.xls
.xlsx
”
.xls
.xlsx
r'C:\xxx\Desktop\test.xls'
r'C:\xxx\Desktop\test.xlsx'
xlrd
xlrd
.xls
.xlsx
xlwings
xlwings
xlwings
xlwings
.xls
.xlsx
True
False
# 程序可见,只打开不新建工作薄
False
# 警告关闭
False
# 屏幕更新关闭
# wb = app.books.open(xls_path)
# 保存文件
# 关闭文件
# 关闭程序
openpyxl
openpyxl
.xlsx
.xls
openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.
pandas
pandas
.xls
.xlsx
'Sheet1'
'Sheet1'
.xlsx
import
import
'time cost: '
's'
xlwings
xlrd
openpyxl
3.2 获取工作表
针对上述4个可以读取 Excel 文件的模块,进一步讨论其获取工作表 sheet 的方式
xlrd
可以通过 sheet 名查找:
"Sheet1"
也可通过索引查找:
0
xlwings
xlwings
# 在活动工作簿
# 在特定工作簿
openpyxl
.active
另外也可以通过工作表名指定获取工作表:
'Sheet1'
pandas
pandas
'Sheet1'
简单总结创建 Excel 文件的情况:
“
xlrd
xlutils
xlwt
.xls
.xlsx
xlwings
.xls
.xlsx
XlsxWriter
.xlsx
openpyxl
.xls
.xlsx
pandas
.xls
.xlsx
”
xlwt
xlwt
.xls
.xlsx
'ascii'
# 创建新的sheet表
"Sheet1"
xlwings
xlwings
.xls
.xlsx
保存工作簿、关闭工作簿、关闭程序
r'\new_practice.xlsx'
XlsxWriter
XlsxWriter
.xlsx
# 添加工作表
'Sheet1'
openpyxl
openpyxl
.xls
.xlsx
# 新工作簿中指定即创建工作表
pandas
pandas
pandas
.to_excel
.xls
.xlsx
r'C:\xxx\test1.xlsx'
简单总结保存 Excel 文件的情况:
“
xlrd
xlwt
.xls
xlutils
xlrd
xlwt
.xls
xlwings
.xls
.xlsx
XlsxWriter
.xlsx
openpyxl
.xlsx
pandas
.xls
.xlsx
”
xlwt
xlwt
.xls
# xls = xlwt.Workbook(encoding= 'ascii')
# worksheet = xls.add_sheet("Sheet1")
"new_table.xls"
xlutils
xlutils
xlrd
xlwt
.xls
# xls_path = r'C:\xxxx\test.xls'
# xls = xlrd.open_workbook(xls_path)
'new_text.xls'
xlwings
xlwings
.xls
.xlsx
# wb = app.books.open(xls_path)
# 保存文件
# 关闭文件
# 关闭程序
XlsxWriter
XlsxWriter
.xlsx
.close
# xlsx = xlsxwriter.Workbook()
# sheet = xlsx .add_worksheet('Sheet1')
openoyxl
openpyxl
.xlsx
# wb = openpyxl.load_workbook(xlsx_path)
# wb = Workbook()
# sheet = wb.active
'new_test.xlsx'
pandas
pandas
.xls
.xlsx
1
2
3
1
2
4
r'C:\xxxx\test1.xls'
r'C:\xxxx\test2.xlsx'
xlrd
xlwings
openpyxl
pandas
xlutils
.xls
xlrd
xlrd
xlutils
xlutils
xlrd
xlrd
xlwt
# xls = xlrd.open_workbook(xls_path)
# sheet = xlsx.sheet_by_name("Sheet1")
4
6
# 第5行第7列的单元格
4
6
for
in
xlwings
# app = xw.App(visible=True, add_book=False)
# app.display_alerts = False
# app.screen_updating = False
# wb = app.books.open(xls_path)
# sheet = wb.sheets.active
# 获取单个单元格的值
'A1'
# 获取横向或纵向多个单元格的值,返回列表
'A1:A3'
# 获取给定范围内多个单元格的值,返回嵌套列表,按行为列表
'A1:C4'
# 获取单个单元格的值
'A1'
# 获取横向或纵向多个单元格的值,返回列表
'A1:A3'
# 获取给定范围内多个单元格的值,返回嵌套列表,按行为列表
'A1:C4'
openpyxl
# wb = openpyxl.load_workbook(xlsx_path)
# wb = Workbook()
# sheet = wb.active
# 一、指定坐标范围的值
'A1:B5'
# 二、指定列的值
'A'
'A:C'
# 三、指定行的值
5
5
7
# 获取单元格的值
for
in
pandas
pandas
pandas
.iloc()
.loc()
.ix()
0
1
1
'b'
'a'
'a'
# 有些版本取消了ix,可以用iat
还是先简单总结对 Excel 文件写入数据的情况:
“
xlrd
xlwt
xlutils
xlwt
xlwings
XlsxWriter
openpyxl
pandas
”
xlwt
xlutils
# xls = xlrd.open_workbook(xls_path)
# xls_xlutils = xlutils.copy.copy(xls)
# sheet = xls_xlutils.sheet_by_name("Sheet1")
# value = sheet.cell_value(4, 6)
# print(value)
4
6
"新内容"
xlwings
# app = xw.App(visible=True, add_book=False)
# app.display_alerts = False
# app.screen_updating = False
# wb = app.books.open(xls_path)
# sheet = wb.sheets.active
# 写入 1 个单元格
'A2'
'大明'
# 一行或一列写入多个单元格
# 横向写入A1:C1
'A1'
1
2
3
# 纵向写入A1:A3
'A1'
True
1
2
3
# 写入范围内多个单元格
'A1'
'table'
1
2
3
4
5
6
XlsxWriter
new_format
# xlsx = xlsxwriter.Workbook()
# sheet = xlsx .add_worksheet('Sheet1')
# 一、写入单个单元格
# A1:从A1单元格开始插入数据,按行插入
'A1'
# A1:从A1单元格开始插入数据,按列插入
'A1'
openpyxl
# wb = openpyxl.load_workbook(xlsx_path)
# wb = Workbook()
# sheet = wb.active
# 一、写入单元格
'A1'
'业务需求'
# 二、写入一行或多行数据
1
2
3
1
2
3
4
5
6
依旧简单总结对 Excel 文件样式调整的情况:
“
xlrd
xlutils
xlutils
xlwt
xlwt
xlwings
XlsxWriter
openpyxl
pandas
”
xlwt
xlwt
# 字体部分
# 初始化样式
# 为样式创建字体
'Times New Roman'
#字体
True
#加粗
True
#下划线
True
#斜体
# 设置样式
# 使用样式
4
6
"新内容1"
# 边框部分
# 设置线型
# 设置样色
0x40
0x40
0x40
0x40
#
# 使用样式
5
8
"新内容2"
xlwings
xlwings
# 获取颜色
'C1'
# 设置颜色
'C1'
255
0
120
# 清除颜色
'C1'
None
8.3 XlsxWriter 调整样式
XlsxWriter
'bold'
True
# 字体加粗
'border'
1
# 单元格边框宽度
'align'
'left'
# 水平对齐方式
'valign'
'vcenter'
# 垂直对齐方式
'fg_color'
'#F4B084'
# 单元格背景颜色
'text_wrap'
True
# 是否自动换行
8.4 openpyxl 调整样式
openpyxl
# 字体样式
from
import
'A1'
'Arial'
12
True
True
'FF0000'
# 段落对齐
from
import
'B2'
'center'
'center'
45
True
# 边框样式
from
import
'B2'
'thin'
'FF0000'
'dashed'
简单总结对 Excel 文件插入图片的情况:
“
xlrd
xlutils
xlutils
xlwt
xlwt
.bmp
xlwings
XlsxWriter
openpyxl
pandas
”
xlwt
xlwt
.bmp
"test.bmp"
2
3
2
2
0.5
0.5
insert_bitmap(img, x, y, x1, y1, scale_x, scale_y)
img
x
y
x1 y1
scale_x scale_y
xlwings
xlwings
r'C:\\xxx.jpg'
# 也可以给定位置插入
r'C:\\xxx.jpg'
'A2'
'A2'
100
100
9.3 XlsxWriter 插入图片
第一个参数是插入的起始单元格,第二个参数是图片文件的绝对路径
'A1'
r'C:\\xxx.jpg'
9.4 openpyxl 插入图片
openpyxl
from
import
'test.jpg'
180
360
# 设置图片的宽和高
'A2'
# 往A2单元格插入图片
以上就是根据不同 Python 模块,对常见的 Excel 操作进行对比的全部内容,最终结果汇总如下表所示
本文目的并不是要评出一个最好的库,仅是从不同角度对不同库进行对比,希望能够让大家了解各个库所擅长的工作
pandas
openpyxl
只有充分了解不同工具的特点,才能够在不同的场景下灵活运用不同的方法来高效解决问题!
- EOF -
推荐阅读
点击标题可跳转
再见 VBA!神器工具统一 Excel 和 Python
向 Excel 说再见,神级编辑器统一表格与 Python
我用 Python 的 Seaborn 库,绘制了 17 个超好看图表!
觉得本文对你有帮助?请分享给更多人
推荐关注「Python开发者」,提升Python技能
点赞和在看就是最大的支持
❤️