python库xlwings的使用, Make Excel Fly!

519 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

1、xlwings模块介绍:

xlwings的意思是给Excel插上翅膀,官网解释为Make Excel Fly。

xlwings是一个可以实现从Excel调用Python,也可在python中调用Excel的库。开源免费,一直在更新。特点:

1)xlwings支持.xls读,支持.xlsx文件读写。
2)支持Excel操作。
3)支持VBA。

xlwings支持操作xlsx和xls类型文件;

官方文档地址:docs.xlwings.org/en/stable/i…

2、xlwings库的安装与更新

xlwings的安装或更新比较简单,Ctrl+右键选择打开命令框,

输入命令 pip install xlwings即可安装,默认安装的是最新版本,如果需要指定版本,则需要在安装时输入pip install xlwings==版本号; 升级xlwings版本,需要执行命令 pip install --upgrade xlwings

验证是否安装成功:

打开命令行窗口,输入python回车,然后输入import xlwings,如果为提示错误,则表示安装成功;使用xlwings.__VERSION__可以查看目前按照版本;

3、xlwings的基本使用:

在xlwings中:

Excel程序用App来表示,多个Excel程序集合用Apps表示;
App就是我们打开的一个Excel应用,在此实例下创建工作薄。因此我们要创建工作簿,就必须先创建App实例。一个App实例可以创建多个工作簿Book。
单个工作簿用Book表示,工作簿集合用Books表示;
单个工作表用Sheet表示,工作表集合用Sheets表示;
区域用Range表示,既可以是一个单元格,也可以是一片单元格区域。

读取Excel文件的操作;

读取需要先实例化一个App对象,执行以下语句:
app = xw.App(visible=True, add_book=False);  实例化一个app并设置可见
app.display_alerts=False 设置不显示警告
wb = app.books.open('H://test.xlsx') 传入Excel文件路径打开文件;
获取第一个sheet表,执行语句:sht = wb.sheets[0]
​获取sheet表中单元格数据的方式如下:
print(sht.range('A1').value) 读取单个
print(sht.range((1, 1), (5, 5)).expand().value)  # 批量读取
print(sht.range(1, 1).expand('right').value)  # 按行读
print(sht.range(1, 1).expand('down').value)  # 按列读

写文件操作:

最简单的写文件操作步骤:
​使用xlwings.App()打开Excel
​使用app.books.add()添加一个工作簿
​使用book.sheets.add()添加一个工作表
使用sheet.range('A1').value="A"给指定的单元格赋值
​使用book.save('文件路径.xlsx')保存文件;

def writeExcel():
    #使用with打开excel,可以不关心关闭的问题,参数标识操作可见
    with xw.App(visible=True,add_book=False) as app:
        book = app.books.add() #创建一个工作簿
        sheet = book.sheets.add() #创建sheet表
        sheet.range('A1').value = '直接写入单元格数据'
        book.save('H://xlwings.xlsx')  #保存文件

#writeExcel()

def writeExcle2():
    book = xw.Book()
    sheet = book.sheets[0]
    sheet.range('A1').value = '直接写'
    book.save('H://xlwings.xlsx')  #保存文件
    book.close()

#writeExcle2()

除了单独写入一个单元格,还可以传入列表写入一行或一列数据;

def writeExcel3():
    ''''''
    wb = xw.Book()
    sht = wb.sheets[0]
    info_list = [['110202111111234','商品1',5],
    ['110202111118891','商品2','16'],
    ['110202111111004','商品3','20'],]
    # 写入表头
    titles = [['商品编号','商品名称','数量']]
    sht.range('a1').value = titles
    # 写入数据
    sht.range('a2').value = info_list
    # 保存数据
    wb.save('H://xlwings.xlsx')
    sht.range('a1').value=['商品编号1','商品名称2','数量3']  #修改
    wb.save()

xlwings的app激活;

每次使用xlwings打开一个新的Excel,都会生成一个app的编号,用于后续区分是哪一个app,用来识别不同的Excel程序;

def getApp():
    ''''''    
    app=xw.App()
    pid = app.pid
    # 就是这个App的PID
    app1=xw.App()
    pid1 = app1.pid
    print(pid,pid1) 
    #wps没有这些
    #apps = xw.apps
    #print(apps.count) #查看app数量
    #keys = apps.keys()
    #print(keys) #查看app的pid值
    #app.activate() #激活当前app

​后续可以通过app.active激活指定的Excel文件进行处理;