Python excel开发学习笔记
1. 概述
你好! 这是一篇学习excel开发的文档。代码从网上收集,然后修改添加自己的代码。
正在编写,在1周内完成,是一个2小时的培训课。
早起收果子:VBA和python对比:(只是针对自动化办公)
VBA要记得东西还是太多了,语法上不简洁。每写一个功能,代码太长了。
VBA虽然在很多程序都有接口,但是,应用范围还是略窄,对于一般用户深入学习后,但是,应用场景太少。有任务驱动,才有动力去提高水平。
Python运行速度绝对不算快的,但是,绝对比在Excel中运行VBA的速度还是要快很多
Python语言简洁(python大法好),模块丰富,有好多大神造好的轮子等着我们去用。
Python应用范围广,既能帮我解决偶尔遇到的表格问题,也能和其他各种软件或者平台联接起来。
1.1安装
- 通过清华的镜像安装,飞快:
rem 安装xlrd, 读取Excel
pip install xlrd -i https://pypi.tuna.tsinghua.edu.cn/simple
rem 安装 xlwt,写Excel
pip install xlwt -i https://pypi.tuna.tsinghua.edu.cn/simple
rem 安装 xlwings,读写Excel,利用com接口
pip install xlwings -i https://pypi.tuna.tsinghua.edu.cn/simple
rem pywin32 com接口插件
pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple
-
也可以下载代码仓里的 setup.bat,运行安装插件
-
xlrd,slwt更多操作请参考文章:python中使用xlrd、xlwt操作excel表格详解
-
VSCode 安装插件:Office Viewer
版本:v2.0.1
可以在vs中查看excel,word等。
2. xlrd 读取文件
后台读取excel,不用安装Excel程序。
步骤:
- 使用 open_workbook函数打开文件,
- 然后读取内容到一个数组,
- 再循环输出数组信息。
源码地址:https://gitee.com/bigearrabbit/kevinpython/blob/master/kevinexcel/xlrd.read.py
import xlrd # Excel 读取
# 打开文件:
wb = xlrd.open_workbook("in/hello.xlsx")
sheetCount = len(wb.sheets()) # sheet数量
if sheetCount < 1:
exit
sheet = wb.sheet_by_index(0) # sheet索引从0开始
if sheet.nrows < 1 or sheet.ncols < 1:
exit
contents = [] # 定义一个行数组
# 逐行读取
for i in range(sheet.nrows): # i从0开始
tmp = [] # 定义一个空数组变量
# 逐列读取
for j in range(sheet.ncols):
value = sheet.cell_value(i, j)
tmp.append(value) # add one value
contents.append(tmp) # first row
# 逐行输出
for i in range(len(contents)):
print(contents[i][-1]) # 逐个输出最后一列
print("...Done...Kevin...", __file__) # Done
3. xlwt 写文件
后台写excel,不用安装Excel程序。
步骤:
- 使用 open_workbook函数打开文件,
- 然后读取内容到一个数组,
- 再循环输出数组信息。
源码地址:https://gitee.com/bigearrabbit/kevinpython/blob/master/kevinexcel/xlwt.write.hello.py
import xlwt
# 初始化并创建一个工作簿
book = xlwt.Workbook()
# 创建一个名为sheetname的表单
sheet = book.add_sheet(u'志于学')
# 设置列宽,256*字符数
sheet.col(0).width = 256 * 5 # Set the column width
sheet.col(1).width = 256 * 10 # Set the column width
sheet.col(2).width = 256 * 30 # Set the column width
# 这是表格数据
table = (
('编号', '年龄', '行为'),
(1, '十五', '志于学'),
(2, '三十', '而立'),
(3, '四十', '不惑'),
(4, '五十', '知天命'),
(5, '六十', '耳顺'),
(6, '七十', '从心所欲,不逾矩')
)
# 循环写入表格数据
rows = len(table)
for i in range(rows):
for j in range(len(table[i])):
# 在i行j列处单元格内写入value值
sheet.write(i, j, table[i][j])
# 如果文档处于被打开状态,无法保存
book.save('in/hello.xls') # save as a sample file
print("...Done...Kevin...", __file__) # Done
4.xlwings插件
- xlwings官方帮助文档:https://docs.xlwings.org/en/stable/api.html
打开Excel程序,通过Com接口操作Excel,需要安装Excel程序。
这个插件重点学习。
4.1 引用excel内容
可以通过当前活动的单元格,或者逐级检索到内容。
源码地址:https://gitee.com/bigearrabbit/kevinpython/blob/master/kevinexcel/xlwings.book.referance.py
# 2021-3-31 python3.8 测试通过,Kevin
import xlwings as xw # import xlwings
app = xw.App(visible=True, add_book=False) # open app
filepath = r"in\hello.xls" # 在字符串前加r可防止字符串转义code
wb = app.books.open(filepath) # open file
# 引用工作簿,注意工作簿应该首先被打开
# app.books[u'hello.xls'] # 使用app
# wx.books[u'hello.xls'] # wx也可以
wb = app.books[u'hello.xls']
print("Get book by name:", wb.name) # print message
# 引用活动工作簿
# app.books.active # 使用app
# wx.books.active # wx也可以
wb = app.books.active
print("Get book active:", wb.name) # print message
# 引用工作簿中的sheet
# sht=xw.books['工作簿的名字‘].sheets['sheet的名字']
# or sht=wb.sheets[sheet的名字]
sht = wb.sheets[u"sheet1"] # get sheet
sht2 = wb.sheets[u"sheet2"] # get sheet
print('sheet name', sht.name, sht2.name) # print message
# 引用A1单元格
# 注意Range首字母大写
rng = sht.range('A1')
print("A1 =", rng.value)
# 引用活动sheet上的单元格
rng = xw.Range('A1')
print(u"引用活动sheet上的单元格", "A1 =", rng.value)
# get pid
pid = xw.apps.active.pid
print ('xw.apps.active pid=',pid)
# 其中需要注意的是单元格的完全引用路径是:
# 第一个Excel程序的第一个工作薄的第一张sheet的第一个单元格
rng = xw.apps[pid].books[0].sheets[0].range('A1')
print(u"完全引用路径", "A1 =", rng.value)
# 迅速引用sheet
# sht=xw.books['名字'].sheets['名字']
sht = xw.books[u'hello.xls'].sheets['sheet1']
print(u'迅速引用sheet:', sht.name) # print message
# -------引用单元格示例-------
print("-------引用单元格示例-------")
# A1单元格
rng=sht['A1']
print( "A1 =", rng.value)
# A1:B5单元格
rng=sht['A1:B5']
print( 'A1:B5 = ', rng.value)
# 在第i+1行,第j+1列的单元格
# B1单元格
rng=sht[0,1]
print( 'sht[0,1] = ', rng.value)
# A1:J10
rng=sht[:10,:10]
print( 'sht[:10,:10] = ', rng.value)
#PS: 对于单元格也可以用表示行列的tuple进行引用
# A1单元格的引用
rng=sht.range(1,1)
print( 'range(1,1) = ', rng.value)
#A1:C3单元格的引用
sht.range((1,1),(3,3))
print( 'range((1,1),(3,3)) = ', rng.value)
wb.close() # close book
app.quit() # quit app
print("...Done...Kevin...", __file__) # Done
参考文章
- 小友~ , CSDN, Python xlwings模块简单使用
- 早起收果子,简书, 插上翅膀,让Excel飞起来——xlwings
[转载] whalefall, CSDN, xlwings使用教程 - 科达柯大侠,CSDN, python利用xlwings库 处理excel 效率 及其他总结-持续更新
- _假象,CSDN, python excel神器xlwings
- chengxuyuanyonghu,CSDN, python中使用xlrd、xlwt操作excel表格详解
- EastonLiu,CSDN, python 对excel操作用法详解
- 杨海华, CSDN, Python的xlrd 和xlwt 安装,插件pip安装与问题处理