精华内容
参与话题
问答
  • xlwings使用教程

    万次阅读 多人点赞 2019-10-21 15:34:11
    python操作Excel的模块,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他们提供的功能归纳起来有两种:一、用python读写Excel文件,实际上就是读写有格式的文本文件,操作excel文件和操作text、...

    (一)

    python操作Excel的模块,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他们提供的功能归纳起来有两种:一、用python读写Excel文件,实际上就是读写有格式的文本文件,操作excel文件和操作text、csv文件没有区别,Excel文件只是用来储存数据。二、除了操作数据,还可以调整Excel文件的表格宽度、字体颜色等。另外需要提到的是用COM调用Excel的API操作Excel文档也是可行的,相当麻烦基本和VBA没有区别。

    xlwings官网.png


    xlwings的特色

     

    • xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改
    • 可以和matplotlib以及pandas无缝连接
    • 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。
    • 开源免费,一直在更新

    基本操作

    xlwings基本对象

    1. 打开已保存的Excel文档
      # 导入xlwings模块,打开Excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
      import xlwings as xw
      app=xw.App(visible=True,add_book=False)
      app.display_alerts=False
      app.screen_updating=False
      # 文件位置:filepath,打开test文档,然后保存,关闭,结束程序
      filepath=r'g:\Python Scripts\test.xlsx'
      wb=app.books.open(filepath)
      wb.save()
      wb.close()
      app.quit()
    2. 新建Excel文档,命名为test.xlsx,并保存在D盘。
      import xlwings as xw
      app=xw.App(visible=True,add_book=False)
      wb=app.books.add()
      wb.save(r'd:\test.xlsx')
      wb.close()
      app.quit()
    3. 在单元格输入值
      新建test.xlsx,在sheet1的第一个单元格输入 “人生” ,然后保存关闭,退出Excel程序。
      import xlwings as xw
      app=xw.App(visible=True,add_book=False)
      wb=app.books.add()
      # wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
      wb.sheets['sheet1'].range('A1').value='人生'
      wb.save(r'd:\test.xlsx')
      wb.close()
      app.quit()
      打开已保存的test.xlsx,在sheet2的第二个单元格输入“苦短”,然后保存关闭,退出Excel程序
      import xlwings as xw
      app=xw.App(visible=True,add_book=False)
      wb=app.books.open(r'd:\test.xlsx')
      # wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
      wb.sheets['sheet1'].range('A1').value='苦短'
      wb.save()
      wb.close()
      app.quit()
      掌握以上代码,已经完全可以把Excel当作一个txt文本进行数据储存了,也可以读取Excel文件的数据,进行计算后,并将结果保存在Excel中。

    引用工作簿、工作表和单元格

    1. 引用工作簿,注意工作簿应该首先被打开
      wb.=xw.books['工作簿的名字‘]
    2. 引用活动工作簿
      wb=xw.books.active
    3. 引用工作簿中的sheet
      sht=xw.books['工作簿的名字‘].sheets['sheet的名字']
      # 或者
      wb=xw.books['工作簿的名字']
      sht=wb.sheets[sheet的名字]
    4. 引用活动sheet
      sht=xw.sheets.active
    5. 引用A1单元格
      rng=xw.books['工作簿的名字‘].sheets['sheet的名字']
      # 或者
      sht=xw.books['工作簿的名字‘].sheets['sheet的名字']
      rng=sht.range('A1')
    6. 引用活动sheet上的单元格
      # 注意Range首字母大写
      rng=xw.Range('A1')
      其中需要注意的是单元格的完全引用路径是:
      # 第一个Excel程序的第一个工作薄的第一张sheet的第一个单元格
      xw.apps[0].books[0].sheets[0].range('A1')
      迅速引用单元格的方式是
      sht=xw.books['名字'].sheets['名字']
      # A1单元格
      rng=sht[’A1']
      # A1:B5单元格
      rng=sht['A1:B5']
      # 在第i+1行,第j+1列的单元格
      # B1单元格
      rng=sht[0,1]
      # A1:J10
      rng=sht[:10,:10]

    PS: 对于单元格也可以用表示行列的tuple进行引用
    # A1单元格的引用
    xw.Range(1,1)
    #A1:C3单元格的引用
    xw.Range((1,1),(3,3))

    储存数据

    1. 储存单个值
      # 注意".value“
      sht.range('A1').value=1
    2. 储存列表
      # 将列表[1,2,3]储存在A1:C1中
      sht.range('A1').value=[1,2,3]
      # 将列表[1,2,3]储存在A1:A3中
      sht.range('A1').options(transpose=True).value=[1,2,3]
      # 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4
      sht.range('A1').options(expand='table').value=[[1,2],[3,4]]

    读取数据

    1. 读取单个值
      # 将A1的值,读取到a变量中
      a=sht.range('A1').value
    2. 将值读取到列表中
      #将A1到A2的值,读取到a列表中
      a=sht.range('A1:A2').value
      # 将第一行和第二行的数据按二维数组的方式读取
      a=sht.range('A1:B2').value

    (二)

    在上一篇插上翅膀,让Excel飞起来——xlwings(一)中提到利用xlwings模块,用python操作Excel有如下的优点:

    • xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改
    • 可以和matplotlib以及pandas无缝连接
    • 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。
    • 开源免费,一直在更新

    本文紧接着上文介绍了xlwings模块一些常用的api

     

    xlwings基本对象

    常用函数和方法

    1. Book 工作簿常用的api
      wb=xw.books[‘工作簿名称']
      • wb.activate()激活为当前工作簿
      • wb.fullname 返回工作簿的绝对路径
      • wb.name 返回工作簿的名称
      • wb.save(path=None) 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
        -wb. close() 关闭工作簿
        代码例子:
        # 引用Excel程序中,当前的工作簿
        wb=xw.books.acitve
        # 返回工作簿的绝对路径
        x=wb.fullname
        # 返回工作簿的名称
        x=wb.name
        # 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
        x=wb.save(path=None)
        # 关闭工作簿
        x=wb.close()
    2. sheet 常用的api
      # 引用某指定sheet
      sht=xw.books['工作簿名称'].sheets['sheet的名称']
      # 激活sheet为活动工作表
      sht.activate()
      # 清除sheet的内容和格式
      sht.clear()
      # 清除sheet的内容
      sht.contents()
      # 获取sheet的名称
      sht.name
      # 删除sheet
      sht.delete
    3. range常用的api
      # 引用当前活动工作表的单元格
      rng=xw.Range('A1')
      # 加入超链接
      # rng.add_hyperlink(r'www.baidu.com','百度',‘提示:点击即链接到百度')
      # 取得当前range的地址
      rng.address
      rng.get_address()
      # 清除range的内容
      rng.clear_contents()
      # 清除格式和内容
      rng.clear()
      # 取得range的背景色,以元组形式返回RGB值
      rng.color
      # 设置range的颜色
      rng.color=(255,255,255)
      # 清除range的背景色
      rng.color=None
      # 获得range的第一列列标
      rng.column
      # 返回range中单元格的数据
      rng.count
      # 返回current_region
      rng.current_region
      # 返回ctrl + 方向
      rng.end('down')
      # 获取公式或者输入公式
      rng.formula='=SUM(B1:B5)'
      # 数组公式
      rng.formula_array
      # 获得单元格的绝对地址
      rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False)
      # 获得列宽
      rng.column_width
      # 返回range的总宽度
      rng.width
      # 获得range的超链接
      rng.hyperlink
      # 获得range中右下角最后一个单元格
      rng.last_cell
      # range平移
      rng.offset(row_offset=0,column_offset=0)
      #range进行resize改变range的大小
      rng.resize(row_size=None,column_size=None)
      # range的第一行行标
      rng.row
      # 行的高度,所有行一样高返回行高,不一样返回None
      rng.row_height
      # 返回range的总高度
      rng.height
      # 返回range的行数和列数
      rng.shape
      # 返回range所在的sheet
      rng.sheet
      #返回range的所有行
      rng.rows
      # range的第一行
      rng.rows[0]
      # range的总行数
      rng.rows.count
      # 返回range的所有列
      rng.columns
      # 返回range的第一列
      rng.columns[0]
      # 返回range的列数
      rng.columns.count
      # 所有range的大小自适应
      rng.autofit()
      # 所有列宽度自适应
      rng.columns.autofit()
      # 所有行宽度自适应
      rng.rows.autofit()
    4. books 工作簿集合的api
      # 新建工作簿
      xw.books.add()
      # 引用当前活动工作簿
      xw.books.active
    5. sheets 工作表的集合
      # 新建工作表
      xw.sheets.add(name=None,before=None,after=None)
      # 引用当前活动sheet
      xw.sheets.active

    实例

    大Z老师,教了小z同学怎么用python操作Excel之后,利用第一篇和第二篇的知识,编写了一个python小脚本,给小Z同学演示了一下怎么用python调整单元格的行宽、列宽和背景色,做一些Interesting的事。

    大Z老师的作品.png

    小Z同学在看了这么cliche但是好玩的东西之后,自己果断地修改了代码,改变了单元格的颜色,并在sheet里面进行了题字,然后,便有新的作品:

    小z的作品.png

    下一课有机会教小z同学,利用python自带的time模块,让Excel中静态的画和字动起来,成为像gif一样的图片。

     

    (三)

    【剧情回顾】

    1. xlwings基本对象

       

      xlwings基本对象

       

      App相当于Excel程序,Book相当于工作簿。N个Excel程序则由apps表示,N个工作簿由books表示。

    2. 对工作簿的操作
    #导入xlwings模块
    import xlwings as xw
    #新建工作簿,这里默认为新建了一个App,即打开Excel程序,并新建一个工作簿
    xw.Book()
    #引用工作簿
    xw.Book('工作簿3')
    # 引用工作簿也可以用books
    xw.books['工作簿3’]
    #打开已有工作簿
    xw.Book(r'e:\myworkbook.xlsx')
    
    1. 对sheet以及Range的操作
    import xlwings as xw
    wb=xw.Book()
    # 引用名字为"sheet2"的sheet
    sht=wb.sheets['sheet2']
    # 引用"sheet2"中的B1单元格
    rng=sht.range('B1')
    # 将B1单元格的值改为666
    rng.value=666
    

    数据结构

    1. 一维数据
      python的列表,可以和Excel中的行列进行数据交换,python中的一维列表,在Excel中默认为一行数据
     import xlwings as xw
    sht=xw.sheets.active
    # 将1,2,3分别写入了A1,B1,C1单元格中
    sht.range('A1').value=[1,2,3]
    # 将A1,B1,C1单元格的值存入list1列表中
    list1=sht.range('A1:C1').value
    # 将1,2,3分别写入了A1,A2,A3单元格中
    sht.range('A1').options(transpose=True).value=[1,2,3]
    # 将A1,A2,A3单元格中值存入list1列表中
    list1=sht.range('A1:A3').value
    
    1. 二维数据
      python的二维列表,可以转换为Excel中的行列。二维列表,即列表中的元素还是列表。在Excel中,二维列表中的列表元素,代表Excel表格中的一列。例如:
    # 将a1,a2,a3输入第一列,b1,b2,b3输入第二列
    list1=[[‘a1’,'a2','a3'],['b1','b2','b3']]
    sht.range('A1').value=list1
    

    运行结果

    # 将A1:B3的值赋给二维列表list1
    list1=sht.range('A1:B3‘).value
    
    1. Excel中区域的选取表格
    # 选取第一列
    rng=sht. range('A1').expand('down')
    rng.value=['a1','a2','a3']
    

     

    第一列

    # 选取第一行
    rng=sht.range('A1').expand('right')
    rng=['a1','b1']
    

    第一行

    # 选取表格
    rng.sht.range('A1').expand('table')
    rng.value=[[‘a1’,'a2','a3'],['b1','b2','b3']]
    

    表格

    结束

    • 本文首先简单介绍了,通过Python运用xlwings模块,对Excel工作簿、工作表和单元格的操作。
    • 再介绍了xlwings,如何对Excel表格的行和列写入和引用数据
    • 通过二维或者一维列表对Excel工作表的数据进行写入或者引用,既简化了代码,也提高了程序的效率。因为python读写Excel表格的速度,原小于python程序自身的运行速度。

    (四)

    前言

    当年看《别怕,Excel VBA其实很简单》相见恨晚,看了第一版电子版之后,买了纸质版,然后将其送人。而后,发现出了第二版,买之收藏。之后,发现Python这一编程语言,简直是逆天,业余非程序员的福音。人生苦短,我用python。简短几句代码,实现好多自己不敢想的功能。
    自学VBA发现对VBA和python,我有着这样几个看法:(只是针对自动化办公)

    • 非专业表哥,只是普通办公,希望偶尔遇到点重复的工作可以自动化一下。VBA对于我来说,要记得东西还是太多了,语法上不简洁。每写一个功能,代码太长了。
    • VBA虽然在很多程序都有接口,但是,应用范围还是略窄,对于一般用户深入学习后,但是,应用场景太少。有任务驱动,才有动力去提高水平。
    • Python运行速度绝对不算快的,但是,绝对比在Excel中运行VBA的速度还是要快很多
    • Python语言简洁(python大法好),模块丰富,有好多大神造好的轮子等着我们去用。
    • Python应用范围广,既能帮我解决偶尔遇到的表格问题,也能和其他各种软件或者平台联接起来。

    运用Python自定义宏(仅限Windows)

    1. 准备工作
    2. 安装xlwings模块
    • 下载模版文件,百度网盘链接:xlwings自定义宏和函数模版

      文件列表


      其中,自定义模版可以修改名称,mymacro为自定义宏的python文件,myfun为自定义函数的python文件。
    • 设置Excel信任中心,信任对VBA工程对象模型的访问

       

      信任中心设置

    1. 自定义宏
      用记事本打开mymacro0,输入下列语句:
    import xlwings as xw
    @xw.sub
    def my_macro():
        wb = xw.Book.caller()
        wb.sheets[0].range('A1').value = wb.name
    

    则宏名称为my_macro的宏就编写好了,将工作簿的名称输入到A1单元格。自定义宏只需要前两句不变,后面内容自己编写,即自定义宏需要以下面的语句为开头

    import xlwings as xw
    @xw.sub
    

    运行方式:先alt+F8运行ImportPythonUDFs内置宏,导入我们的自定义宏和函数,导入后,再运行我定义的my_macro宏。

     

    执行

    1. 自定义函数
      准备工作是一致的,打开myfun0,写入第一个自定义函数:
    import xlwings as xw
    @xw.func
    def myfun():
        wb = xw.Book.caller()
        return wb.name
    

    注意,开头语句为@xw.func而不是@xw.sub了,然后函数相对于宏,有返回值,所以用了return语句。自定义好函数之后,刚可以像Excel自带函数一样的去使用了。如在A1单元格输入”=myfun()",则会得到工作簿的名称。

    结束

    本文给出了xlwings模块自定义宏和函数的模版,然后简单介绍了如何去定义宏和函数。注意:

    • 一个python文件,只能定义一个宏或者函数,所以模版中已经默认分别给出了三个宏和函数文件,方便直接使用。
    • python文件的名称和相对文件位置不能改变,Excel文件的文件位置不能改变,名称可以改变。如需修改,请参考xlwings官方文档。

    作者:LuckyFrog
    链接:https://www.jianshu.com/p/e21894fc5501
    来源:简书
    著作权归作者所有。

     

    参考资料:

    https://docs.xlwings.org/en/stable/index.html

    https://www.kancloud.cn/gnefnuy/xlwings-docs/1127450

    展开全文
  • python excel神器xlwings

    万次阅读 2016-01-21 22:52:01
    (–本文是个人学习和使用过程中的总结,如有错误欢迎指正 )最近工作需要整理将近60位同事的周报合并到一个excel中,每周都会占用的大量的时间。希望把这个工作自动化,网上看了下基本都是用vba编程实现这一功能。...

    (–本文是个人学习和使用过程中的总结,如有错误欢迎指正 )

    最近工作需要整理将近60位同事的周报合并到一个excel中,每周都会占用的大量的时间。希望把这个工作自动化,网上看了下基本都是用vba编程实现这一功能。由于没有使用过vba,希望使用自己会的东西去实现。
    我们的周报模板大致是这个样子的:
    这里写图片描述

    搜了下python操作excel的包,看到最多的是xlrd和xlwt。我的操作其实很简单就是拷贝每一个excel中的内容并粘贴到一个汇总的excel,但这两个包好像并不符合我的要求。

    偶然间看到xlwings这个python包,使用这个包基本可以实现你在excel中的操作,如选中B5 到J20 这些单元格中的数据。这正是我想要的,写了个简单的脚本实现周报的整理,在这里记录下。
    使用中参考了xlwings官方文档
    我主要使用了WorkBook、Sheet、Range这三个。

    import xlwings as xw
    #app_visible=False 不打开excel窗口
    wb = xw.Workbook(path), app_visible=False)
    detail_sheet = xw.Sheet(unicode("任务详细信息", "utf-8"))
    #获取有数据的最大行数,由于我们单个excel数据不会超过几十行,我使用的是B4:I40
    last_row_index = xw.Range(detail_sheet, "B4").table.last_cell.row
    #确定我们选取的数据范围,如: B4:I20
    rg = "B4:I" + str(last_row_index)
    #获取划定范围单元格中的数据
    work_detail = xw.Range(detail_sheet, rg).value
    #关闭打开的excel
    wb.close()

    接下来就是将work_detail 获取到的数据拷贝到我们汇总的excel中,代码几乎一致

    target_excel_path = u"F:\经分应用产品线小组周报模板.xlsx"
    wb_target = xw.Workbook(target_excel_path, app_visible=False)
    cr_sheet = xw.Sheet(u"任务详细信息")
    #清空内容,单不清空格式
    xw.Range(cr_sheet, "B4:I200").clear_contents()
    xw.Range(cr_sheet, "B4").table.value = work_detail
    wb_target.save(u"F:\经分应用产品线小组周报.xlsx")
    wb_target.close()

    (PS 后面希望加入自动添加数据透视图的功能,暂时还没找到这方面的接口)

    好了,以后只需要run一下python脚本,自动整理并且发送邮件给负责人。
    搞定 。。。。。。

    展开全文
  • xlwings使用教程

    2020-06-10 16:14:49
    xlwings介绍 python操作Excel的模块,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他们提供的功能归纳起来有两种:一、用python读写Excel文件,实际上就是读写有格式的文本文件,操作excel文件...

    xlwings介绍

    python操作Excel的模块,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他们提供的功能归纳起来有两种:一、用python读写Excel文件,实际上就是读写有格式的文本文件,操作excel文件和操作text、csv文件没有区别,Excel文件只是用来储存数据。二、除了操作数据,还可以调整Excel文件的表格宽度、字体颜色等。另外需要提到的是用COM调用Excel的API操作Excel文档也是可行的,相当麻烦基本和VBA没有区别

    xlwings中文文档

    https://www.kancloud.cn/gnefnuy/xlwings-docs/1127474

    xlwings的特色

    • xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改
    • 可以和matplotlib以及pandas无缝连接
    • 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。
    • 开源免费,一直在更新

    基本操作

    在这里插入图片描述

    一、引入库

    import xlwings as xw
    

    二、打开 excel

    # 打开Excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
    app=xw.App(visible=True,add_book=False)
    app.display_alerts=False
    app.screen_updating=False
    # 其他操作:
    # app.screen_updating = False  
    # :屏幕更新,就是说代码对于excel的操作你可以看见,关闭实时更新可以加快脚本运行。默认是True。
    # app.pid    #App进程pid
    # app.books  #返回一个打开的全部workbook的列表。Python打开的和手动打开的是不互通的
    # 终止进程,强制退出。
    # app.quit() #不保存的情况下,退出excel程序
    

    三、工作簿

    注意工作簿应该首先被打开

    1、新建Excel文档

    wb = app.books.add() #创建新的book
    wk = xw.Book()
    wk = xw.books.add()
    

    2、 打开Excel文档

    # 支持绝对路径和相对路径
    wb = app.books.open('filepath')
    wk = xw.Book('filepath')
    wk = xw.books.open('filepath')
    # 练习的时候建议直接用下面这条
    # wb = xw.Book('example.xlsx')
    # 这样的话就不会频繁打开新的Excel
    

    3、打开未储存或未关闭的excel实例

    wk = xw.Book('Book1')    
    wk = xw.books['Book1']  #也可以使用索引
    

    如果在两个Excel实例中打开了相同的文件,则需要完全限定它并包含应用程序实例。 您将通过xw.apps.keys()找到您的应用实例密钥(PID):

    xw.apps[10559].books['FileName.xlsx']
    查看所有的实例进程:
    xw.apps.keys() #输出list
    
    kill所有的实例进程:
    for i in xw.apps.keys():
      i = 'taskkill/pid ' + str(i) + ' -t -f'     
      os.system(i)
    

    4、打开活动的工作簿

    wb = xw.books.active
    

    5、保存

    wb.save(path=None)
    # 保存工作簿,若为指定路径,保存在当前工作目录。 
    

    6、关闭

    wk.close()  #在没有保存的情况下关闭。
    

    7、退出Excel

    app.quit()
    

    四、工作表

    1、打开工作表

    # 可以用名字也可以用索引
    sheet = xw.books['工作簿的名字'].sheets['sheet的名字']
    sheet = xw.books['工作簿的名字'].sheets[0]
    

    2、打开活动工作表

    sheet = xw.sheets.active
    

    3、返回sheet指定的book

    book_name = sheet.book
    

    4、返回一个range对象,表示sheet上所有的单元格

    sheet_cells = sheet.cells
    

    5、获取或设置Sheet的名称

    sheet.name
    # 返回所有的工作表特定名称。
    sheet_names_list = sheet.names
    

    6、获取sheet中的所有图表集合

    sheet.charts
    

    7、清空表中所有数据和格式。

    sheet.clear()
    

    8、清除工作表的内容,但保留格式

    sheet.clear_contents()
    

    9、删除工作表

    sheet.delete()
    

    10、返回表索引(与excel相同)

    sheet.index
    

    11、创建一个新的Sheet并使其成为活动工作表

    wb.sheets.add(name=None, before=None, after=None) 
    #参数:name(str,default None) - 新工作表的名称。 如果为None,则默认为Excel的name.before (Sheet, default None) - 一个对象,指定在新工作表添加之前的added.after (Sheet, default None) - 指定工作表之后的工作表的对象 表格已添加。
    

    12、在整个工作表上自动调整列,行或两者的宽度

    sheet.autofit(axis=None) 
    # 参数:axis (string, default None) –要自动调整行, 使用以下之一: rows 或 r,要自动调整列, 使用以下之一: columns h c,要自动调整行和列, 不提供参数
    

    13、获取excel sheet多少行多少列

    app = xw.App(visible=False, add_book=False)
    xls = app.books.open(excel_file)
    sheet = xls.sheets[0]
    info = sheet.used_range
    nrows = info.last_cell.row
    ncols = info.last_cell.colum
    

    五、单元格

    1、引用A1单元格

    rng = xw.books['工作簿的名字'].sheets['sheet的名字']
    # 或者
    sheet=xw.books['工作簿的名字'].sheets['sheet的名字']
    rng=sheet.range('A1')
    

    2、引用活动工作表上的单元格

    # 注意Range首字母大写
    rng=xw.Range('A1')
    其中需要注意的是单元格的完全引用路径是:
    # 第一个Excel程序的第一个工作薄的第一张sheet的第一个单元格
    xw.apps[0].books[0].sheets[0].range('A1')
    迅速引用单元格的方式是
    sht=xw.books['名字'].sheets['名字']
    # A1单元格
    rng=sht[’A1']
    rng=sht['a1']
    # A1:B5单元格
    rng=sht['A1:B5']
    # 第一行的第一列即a1
    rng=sht[0,0] 
    # B1单元格
    rng=sht[0,1]
    

    3、引用区域单元格

    # A1:J10
    rng=sht[:10,:10]
    rng=sht.range('a1:a5')
    #rng = sht['a1:a5']
    #rng = sht[:5,0]
    

    PS: 对于单元格也可以用表示行列的tuple进行引用

    # A1单元格的引用
    xw.Range(1,1)
    #A1:C3单元格的引用
    xw.Range((1,1),(3,3))
    

    六、写入数据

    1、写入单个值

    # 注意".value“
    sht.range('A1').value=1
    

    2、写入列表

    默认按行插入

    # 将列表[1,2,3]储存在A1:C1中
    sht.range('A1').value=[1,2,3]
    # 等同于
    sht.range('A1:A3').value = [1,2,3]
    

    按列插入

    # 将列表[1,2,3]储存在A1:A3中
    sht.range('A1').options(transpose=True).value=[1,2,3]
    

    多行输入就要用二维列表了

    # 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4
    sht.range('A1').options(expand='table').value=[[1,2],[3,4]]
    

    七、读取数据

    1、读取单个值

    # 将A1的值,读取到a变量中
    a=sht.range('A1').value
    

    2、读取范围的值

    返回的值是列表形式,多行多列为二维列表,但有一点要注意,返回的数值默认是浮点数

    #将A1到A2的值,读取到a列表中
    a=sht.range('A1:A2').value
    # 将第一行和第二行的数据按二维数组的方式读取
    a=sht.range('A1:B2').value
    

    读取excel的第一列,先计算单元格的行数

    rng = sht.range('a1').expand('table')
    nrows = rng.rows.count
    

    接着就可以按准确范围读取了

    a = sht.range(f'a1:a{nrows}').value
    

    同理选取一行的数据也一样

    ncols = rng.columns.count
    #用切片
    fst_col = sht[0,:ncols].value
    

    八、常用函数和方法

    1、Book 工作簿常用的api

    # 新建工作簿
    xw.books.add()
    # 引用当前活动工作簿
    xw.books.active
    wb=xw.books[‘工作簿名称']
    wb.activate()激活为当前工作簿
    wb.fullname 返回工作簿的绝对路径
    wb.name 返回工作簿的名称
    wb.save(path=None) 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
    -wb. close() 关闭工作簿
    代码例子:
    # 引用Excel程序中,当前的工作簿
    wb=xw.books.acitve
    # 返回工作簿的绝对路径
    x=wb.fullname
    # 返回工作簿的名称
    x=wb.name
    # 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
    x=wb.save(path=None)
    # 关闭工作簿
    x=wb.close()
    

    2、sheet 常用的api

    # 新建工作表
    xw.sheets.add(name=None,before=None,after=None)
    # 引用当前活动sheet
    xw.sheets.active
    # 引用某指定sheet
    sht=xw.books['工作簿名称'].sheets['sheet的名称']
    # 激活sheet为活动工作表
    sht.activate()
    # 清除sheet的内容和格式
    sht.clear()
    # 清除sheet的内容
    sht.contents()
    # 获取sheet的名称
    sht.name
    # 删除sheet
    sht.delete
    

    3、range常用的api

    # 引用当前活动工作表的单元格
    rng=xw.Range('A1')
    # 加入超链接
    # rng.add_hyperlink(r'www.baidu.com','百度',‘提示:点击即链接到百度')
    # 取得当前range的地址
    rng.address
    rng.get_address()
    # 清除range的内容
    rng.clear_contents()
    # 清除格式和内容
    rng.clear()
    # 取得range的背景色,以元组形式返回RGB值
    rng.color
    # 设置range的颜色
    rng.color=(255,255,255)
    # 清除range的背景色
    rng.color=None
    # 获得range的第一列列标
    rng.column
    # 返回range中单元格的数据
    rng.count
    # 返回current_region
    rng.current_region
    # 返回ctrl + 方向
    rng.end('down')
    # 获取公式或者输入公式
    rng.formula='=SUM(B1:B5)'
    # 数组公式
    rng.formula_array
    # 获得单元格的绝对地址
    rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False)
    # 获得列宽
    rng.column_width
    # 返回range的总宽度
    rng.width
    # 获得range的超链接
    rng.hyperlink
    # 获得range中右下角最后一个单元格
    rng.last_cell
    # range平移
    rng.offset(row_offset=0,column_offset=0)
    #range进行resize改变range的大小
    rng.resize(row_size=None,column_size=None)
    # range的第一行行标
    rng.row
    # 行的高度,所有行一样高返回行高,不一样返回None
    rng.row_height
    # 返回range的总高度
    rng.height
    # 返回range的行数和列数
    rng.shape
    # 返回range所在的sheet
    rng.sheet
    #返回range的所有行
    rng.rows
    # range的第一行
    rng.rows[0]
    # range的总行数
    rng.rows.count
    # 返回range的所有列
    rng.columns
    # 返回range的第一列
    rng.columns[0]
    # 返回range的列数
    rng.columns.count
    # 所有range的大小自适应
    rng.autofit()
    # 所有列宽度自适应
    rng.columns.autofit()
    # 所有行宽度自适应
    rng.rows.autofit()
    

    作者:LuckyFrog
    链接:https://www.jianshu.com/p/e21894fc5501
    来源:简书
    著作权归作者所有。

    参考资料:

    https://docs.xlwings.org/en/stable/index.html

    https://www.kancloud.cn/gnefnuy/xlwings-docs/1127450

    展开全文
  • python利用xlwings库 处理excel win环境 使用总结-持续更新 效率问题 启动效率 接口读写效率及建议 颜色读写效率 Options() range().color() app.screen_updating

    xlwings 入门及使用方式指导

    • 我对比了openxl 和 xlwings的官方文档,发现xlwings的官网API说明很清楚简洁,
    • 如果你刚入门,不要去百度按照功能搜索一句句的去拼接代码,
    • 直接花一个小时看下API接口说明,基本你就会用了
    • 同时,官网还放了一些小实例,帮助你入门
      xlwings官网API说明书

    举例一些操作模块

    打开和处理一个xlsx文件,关闭

    import xlwings as xlw
    app = xlw.App(visible=True, add_book=False)
    app.display_alerts = False
     app.screen_updating = False  # excel 是否展示内容
     wb = app.books.open(self.XlsPath)
    
    procxls()  # 个人处理过程
    
     wb.save()  # 处理后保存
     wb.close()  # 关闭文件句柄,写入文件
     app.quit()  # 关闭app
    

    写入多行数据

    储存列表
    # 将列表[1,2,3]储存在A1:C1中
    sht.range('A1').value=[1,2,3]
    # 将列表[1,2,3]储存在A1:A3中
    sht.range('A1').options(transpose=True).value=[1,2,3]
    # 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4
    sht.range('A1').options(expand='table')=[[1,2],[3,4]]
    

    options() 这个函数,中文文档很少有人描述的很清楚的,建议大家去看官网,不要被误导

    xlwings高级接口

    至于一些简单的操作,已经有人写了很不多的博客,我给大家引过来,自己不再过多赘述

    xlwings一些读、写表格 API用法,中文博客地址

    效率问题

    启动效率

    open()时会启动win环境自带的office-excel安装程序(就相当于帮你打开了要操作的excel表格);这个效率取决于你自身电脑性能,一般都要耗时3s左右,我试过老一点的笔记本要5s;

    app = xlw.App(visible=True, add_book=False)
    app.display_alerts = False
    app.screen_updating = False  # excel 是否展示内容
    wb = app.books.open(self.XlsPath)
    

    刷新效率

    app.screen_updating = False 选项,是配置是否实时刷新excel程序的显示内容,
    如果配是True,我实测会导致速度慢三倍左右。

    接口读写效率及建议

    对excel的读、写,基本都是通过

    • sht.range(“A1”).value 【读】
    • sht.range(“A1”).value = ‘你好’ 【写】
      这里边有个性能问题,如果你一个个 cell单元格 去读写,特别慢,我循环 读取+写入 2000个单元格,耗时基本30s

    但是,如果你批量读、写,就能变得很快,例如: 一次读、写一整行

    • sht.range(“A1:Z1”).value 【读】
    • sht.range(“A1:Z1”).value = (‘你好’, ‘你好’, ‘你好’, …) 【写】

    所以,要提高效率,就要尽量批量操作

    颜色读写性能及缺点

    上边证明批量操作能提高效率,但是,读写颜色又有一个不爽的地方,不支持批量操作

    • sht.range(“A1”).color 【读】
    • sht.range(“A1”).color = (210, 67, 9) 【写】
      我做的项目,需要依据颜色对表格做不同的操作(修改、删除等),导致每次只能循环一个个cell单元格来遍历
    展开全文
  • xlwings库的基本使用笔记

    千次阅读 2019-08-22 08:37:51
    xlwings的安装; 在cmd命令窗口下pip下xlwings库 具体在cmd下输入命令行:pip install xlwings 安装失败,根据报错自行百度。 导入xlwings库 import xlwings as xw 总结操纵打开excel的方式: 1.利用...
  • import xlwings as xw app = xw.App(visible = True, add_book = False) ws=app.books.open('nnnn.xlsx') wwww=ws.sheets['数据表格'] rownumer=wwww.used_range.last_cell.row b_range = wwww.range(':'.join(['A1'...
  • Python3.6 在win10下安装xlwings

    千次阅读 2017-12-24 13:59:59
    Win+R => cmd => pip install xlwings 完成 或者去这里手动下载对应版本安装:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/ 验证一下:import xlwings as
  • xlwings 使用教程

    千次阅读 2020-03-14 15:33:24
    https://docs.xlwings.org/zh_CN/latest/api.html https://www.cnblogs.com/catgatp/p/7875683.html https://support.i-search.com.cn/article/1552533175579 内容较为丰富,Python 读写 Excel 文件——xlwings (转...
  • 介绍 xlwsings,这个库允许你在 VBA 中调用 Python 代码,从而大大简化很多事务性工作的处理。并且使用简单方便...
  • 基于xlwings的Documents写的中文实用教程代码版
  • xlwings使用笔记

    千次阅读 2018-10-21 21:14:55
    1、安装xlwings 很简单,直接pip install xlwings 也可以去下载安装包到本地安装,但是由于依赖的比较多,每次安装失败还要再去找依赖包安装,很麻烦,不推荐 2、安装add-in 因为想在excel里面用VBA调用xlwings...
  • Python xlwings模块简单使用

    万次阅读 多人点赞 2019-06-04 17:01:45
    Python xlwings模块操作excel xlwings 安装 xlwings 基础 xlwings 安装 操作excel模块的比较 xlwings官方文档 基本操作 安装 pip install xlwings xlwings 基础
  • xlwings模块学习

    2019-12-07 09:29:58
    xlwings的优点 xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改 可以和matplotlib以及pandas无缝连接 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。 开源免费...
  • xlwings.pdf

    2019-06-13 15:07:17
    xlwings 原版官方最新手册,有很多实例, Make Excel Fly!
  • xlwings API Documentation

    2019-10-03 11:48:31
    http://docs.xlwings.org/en/stable/api.html Top-level functions ...xlwings.view(obj,sheet=None) Opens a new workbook and displays an object on its first sheet by default. If you provide a sheet...
  • 初学xlwings,刚开始就遇到了问题 xlwings导入后无法调用Book()方法,但是在控制台里可以用 **错误信息:** ``` Traceback (most recent call last): File "xlwings.py", line 1, in import ...
  • python excel xlwings 详解

    千次阅读 2019-05-29 20:40:19
    官方文档: ...import xlwings as xw # 设为程序可见, 不新建工作薄 # app = xw.App(visible=True, add_book=False) # 新建文档,保存 wb = xw.Book() wb.save('test.xlsx') # 打开...
  • xlwings是一款操作Excel的开源库,其宗旨——让Excel飞起来!
  • python 的xlwings

    2019-04-11 14:36:21
    对于非程序员来说,后者更加普遍,毕竟Excel是世界上使用最广泛的数据分析工具 用xlwings来实现 保存数据 更新数据 .......
  • xlwings:操作Excel,通过宏调用Pyhton(VBA调Python)

    万次阅读 多人点赞 2018-05-13 17:15:55
    这里补一段xlwings的安装方式(更简单,如果有效的话,但不确定是否有效,慎重!) 1. 先卸载掉原来可能存在的xlwings pip uninstall xlwings conda uninstall xlwings 2. 下载安装xlwings pip install xlwings...

空空如也

1 2 3 4 5 ... 20
收藏数 2,055
精华内容 822
关键字:

xlwings