当前位置:   article > 正文

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

xlwings读取excel

一、背景
有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!

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/208778
推荐阅读
相关标签
  

闽ICP备14008679号