Python学习随笔:使用xlwings读取和操作Execl文件

一、背景
有2种模块可以对Execl文件,一种是xlwt 方式,需要安装三个库文件 xlrd(读Excel)xlwt(写Excel)xlutils(修改Excel),也是网上介绍文章最多的一种方法,一种是xlwings方式,只要安装一个库文件。第一种方式将读写修改分模块,支持Excel表格样式设计,第二种方式不支持表格样式设计,支持对Excel进行读写操作。由于老猿目前只要用Execl进行读操作,同时觉得装一个库文件简单,因此选择的是xlwings方式。

二、软件安装
才开始使用pip install xlwings安装,结果超时了,果断改成了使用国内的镜像来安装,很快完成,命令为:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlwings

三、库文件相关文档
xlwings库官方地址:https://docs.xlwings.org/en/stable/

四、xlwings库主要操作方法
1、设置Excel操作模式
1)语法:App(visible=False, add_book=False)
2)语法释义:表示处理过程是否可视,也就是处理Excel的过程会不会显示出来,即是否出现Excel的界面,add_book表示是否打开新的Excel程序,也就是是不是打开一个新的excel窗口,如果为True,且visible为True,则立即打开一个空白的Excel。。

2、打开文件
1)方法1:app.books.open(文件名),其中的app为设置Excel操作模式中App方法返回的结果
2)方法2:Book(文件名)

这两种方法打开文件返回的结果类型是相同的,类型为xlwings.main.Book,二者的差别经验证测试,发现如果是在对应文件已经打开的情况下,使用app.books.open再去打开可以重复打开,但Book不会重复打开。且如果是一个程序内多次调用app.books.open打开同一个文件也不会重复打开。
测试代码:

>>> import xlwings as Excel
>>> from time import sleep
>>> def openexcel(visible=False, add_book=False)
    app = Excel.App(visible, add_book)
    print("app created!")
    f1=app.books.open(r"c:\temp\csdn积分数据.xls")
    print("f1 opened!")
    sleep(2)
    f2=app.books.open(r"c:\temp\csdn积分数据.xls")
    print("f2 opened!")
    sleep(2)
    f3 = Excel.Book(r"c:\temp\csdn积分数据 - 副本.xls")
    print("f3 opened!")
    sleep(2)
    f4 = Excel.Book(r"c:\temp\csdn积分数据 - 副本.xls")
    print("f4 opened!")

    
>>> openexcel(True,True)
app created!
f1 opened!
f2 opened!
f3 opened!
f4 opened!
>>> openexcel(True,True)
app created!
f1 opened!
f2 opened!
f3 opened!
f4 opened!

3.文件打开后的访问
假设文件打开后的返回结果为f,则打开文件后:
1)访问Excel的sheet
sheet = f.sheets[index]
或者
sheet = f.sheets[‘sheet名’]
注意:index是sheet页的序号,从0开始。

2)访问sheet的记录数
sheet.used_range.last_cell.row

3)访问sheet的列数
sheet.used_range.last_cell.column

4)获取i行j列的数据
value = sheet.range(i,j).value

5)获取i行j列开始到j+10列的数据
value = sheet.range((i,j),(i,j+10)).value

6)读取第i行整行
value = sheet.range(‘Ai’).expand(‘right’).value

value = sheet.range(i,1).expand(‘right’).value

6)读取第k列整列
value = sheet.range(‘k1’).expand(‘down’).value

alue = sheet.range(1,k).expand(‘down’).value

7)读取整个sheet的数据
data = sheet.range(‘A1’).expand().value

4、sheet内容写入:
直接对sheet数据赋值,将读取语句的方式改成赋值就可以了,如果写入位置原来有数据,将被写入数据覆盖。
1)i行j列写入
sheet.range(i,j).value = value

2)写入i行j列开始到j+10列的数据
sheet.range((i,j),(i,j+10)).value = values
其中values为一个有11个元素的列表。

3)第i行写入整行
sheet.range(i,1).expand(‘right’).value = values

4)第k列写入整列
sheet.range(1,k).options(transpose=True).value = values

5、文件保存
f.save(文件名)
如果没有文件名参数保存到打开的Excel文件中,如果给定文件名参数则保存到该指定文件名对应文件,该文件可以是已经打开的文件也可以是另一文件。

6、文件访问后关闭
f.close()

7、终结应用
app.quit()

五、Excel文件读取案例

>>> def readExcel(filename,sheetname):
    excelApp = excel.App(False,False)
    excelFile = excelApp.books.open(filename)
    sheet = excelFile.sheets[sheetname]
    rowCount = sheet.used_range.last_cell.row
    colCount = sheet.used_range.last_cell.column
    for line in range(1,rowCount+1):yield sheet.range(line,1).expand('right').value
    excelFile.close()
    excelApp.quit()
    excelApp.kill() #有时quit退出不成功可以使用kill
    
>>> for line in readExcel(r"c:\temp\csdn积分数据.xls",0):print(line)

博客地址:https://blog.csdn.net/LaoYuanPython

老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036

发布了579 篇原创文章 · 获赞 3398 · 访问量 30万+

猜你喜欢

转载自blog.csdn.net/LaoYuanPython/article/details/102076703
今日推荐