zoukankan      html  css  js  c++  java
  • 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:	empcsdn积分数据.xls")
        print("f1 opened!")
        sleep(2)
        f2=app.books.open(r"c:	empcsdn积分数据.xls")
        print("f2 opened!")
        sleep(2)
        f3 = Excel.Book(r"c:	empcsdn积分数据 - 副本.xls")
        print("f3 opened!")
        sleep(2)
        f4 = Excel.Book(r"c:	empcsdn积分数据 - 副本.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:	empcsdn积分数据.xls",0):print(line)
    

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

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

  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11931594.html
Copyright © 2011-2022 走看看