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

  • 相关阅读:
    设计模式---行为变化模式之命令模式(Command)
    设计模式---数据结构模式之职责链模式(Chain of Responsibility)
    设计模式---数据结构模式之迭代器模式(Iterate)
    WinCE全屏手写输入法
    .net下所有DLL(API)查询,转换C#代码
    在线cron表达式生成器
    完全卸载vs2013、vs2015的方法
    java微信 客服接口-发消息 中文乱码
    【路由达人】简单两步搞定小米路由新增功能-DDNS(解析域名地址转向在线工具)
    微信公众平台开发入门教程
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11931594.html
Copyright © 2011-2022 走看看