Python excel( xlrd,xlwt, xlwings)表格开发 -【Python Office开发基础培训】

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

2. xlrd 读取文件

后台读取excel,不用安装Excel程序。
步骤:

  1. 使用 open_workbook函数打开文件,
  2. 然后读取内容到一个数组,
  3. 再循环输出数组信息。

源码地址: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程序。
步骤:

  1. 使用 open_workbook函数打开文件,
  2. 然后读取内容到一个数组,
  3. 再循环输出数组信息。
    源码地址: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插件

打开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

参考文章

  1. 小友~ , CSDN, Python xlwings模块简单使用
  2. 早起收果子,简书, 插上翅膀,让Excel飞起来——xlwings
    [转载] whalefall, CSDN, xlwings使用教程
  3. 科达柯大侠,CSDN, python利用xlwings库 处理excel 效率 及其他总结-持续更新
  4. _假象,CSDN, python excel神器xlwings
  5. chengxuyuanyonghu,CSDN, python中使用xlrd、xlwt操作excel表格详解
  6. EastonLiu,CSDN, python 对excel操作用法详解
  7. 杨海华, CSDN, Python的xlrd 和xlwt 安装,插件pip安装与问题处理
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄鸭code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值