zoukankan      html  css  js  c++  java
  • Python与Excel交互--Xlwings

    ##############################################
    ##############################################

    Python与Excel交互--Xlwings

    功能齐全,支持Excel的新建、打开、修改、保存(pandas和xlsxwriter去不能全做到)

    引入库

    import xlwings as xw

    打开Excel程序,默认设置:程序可见,只打开不新建工作薄

    app = xw.App(visible=True,add_book=False)

    新建工作簿 (如果不接下一条代码的话,Excel只会一闪而过,卖个萌就走了)

    wb = app.books.add()

    打开已有工作簿(支持绝对路径和相对路径)

    wb = app.books.open('example.xlsx')

    #练习的时候建议直接用下面这条

    wb = xw.Book('a1.xlsx') #这样的话就不会频繁打开新的Excel

    引用Excel工作表,单元格

    引用工作表

    sht = wb.sheets[0] #sht = wb.sheets[第一个sheet名]

    引用单元格

    rng = sht.range('a1') #rng = sht['a1'] #rng = sht[0,0] 第一行的第一列即a1,相当于pandas的切片

    引用区域

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

    重头戏:写入数据

    (xlwings多个单元格的写入大多是以表格形式)

    选择起始单元格A1,写入字符串‘Hello’

    sht.range('a1').value = 'Hello'

    默认按行插入: A1:D4分别写入1,2,3,4

    sht.range('a1').value = [1,2,3,4]

    等同于

    sht.range('a1:d1').value = [1,2,3,4]

    按列插入: A2:A5分别写入5,6,7,8

    '''
    你可能会想
    *sht.range('a2:a5').value = [5,6,7,8]
    但是你会发现xlwings还是会按行处理的,上面一行等同于
    *sht.range('a2').value = [5,6,7,8]
    正确语法:
    '''
    sht.range('a2').options(transpose=True).value = [5,6,7,8]

    既然默认的是按行写入,我们就把它倒过来嘛(transpose),单词要打对,如果你打错单词,它不会报错,

    而会按默认的行来写入(别问我怎么知道的)

    我们输入信息的时候往往不只是写入一行或一列,

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

    sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']]

    说完了写入就该讲读取了,记住了写入,读取就简单了

    读取A1:D4(直接填入单元格范围就行了)

    print(sht.range('a1:a4').value)

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

    a=sht.range('a1:d1').value
    print(a)
    for i in a:
    print(i)
    print(type(i))

    读取excel的第一列怎么做?

    a = sht.range('a:a').value

    print(len(a))

    你将会得到一个1048576个元素的列表,也就是空值也包含进去了,所以这种方法不行

    思路:先计算单元格的行数(前提是连续的单元格)

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

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

    a= sht.range(f'a1:a{nrows}').value
    print("a1:a8",a)

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

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

    好了基本操作就介绍到这里了,下次搞个实战,把xlwings好好用起来

    保存工作簿

    wb.save('example.xlsx')

    退出工作簿(可省略)

    wb.close()

    退出Excel

    app.quit()

    #######end###############

    因为不懂,所以要学; 因为平凡,所以努力。 因为有为,所以有位。 因为执着,所以精彩。
  • 相关阅读:
    FineReport: 参数为空选出全部值(按条件查询,空条件时直接过滤,不进行查询。。)
    BarManager菜单栏加载与菜单项点击事件详解|devExpress教程
    BarManager菜单栏加载与菜单项点击事件详解|devExpress教程
    C# 判断类型间能否隐式或强制类型转换,以及开放泛型类型转换 update
    C# 判断类型间能否隐式或强制类型转换,以及开放泛型类型转换 update
    Devexpress Chart series 点击时获取SeriesPoint的值
    Devexpress Chart series 点击时获取SeriesPoint的值
    IndexOf()、IndexOfAny()的用法 —— c#
    IndexOf()、IndexOfAny()的用法 —— c#
    Java并发问题乐观锁与悲观锁以及乐观锁的一种实现方式CAS
  • 原文地址:https://www.cnblogs.com/quezesheng/p/13322895.html
Copyright © 2011-2022 走看看