python读写excel之xlwings包

2021-12-21:更新

合并单元格:原本的函数是 .api.merge(),现在换成Merge了。我的版本:
在这里插入图片描述

# sht 是wb.sheets的某个object
sht.range('A1:A2').api.Merge()

我的使用感受

xlwings可以处理xls和xlsx格式,在写excel时非常方便,格式控制比较灵活,但是我遇到以下几个问题:

  • xlwings需要有excel安装。服务器就算了。
  • xlwings结束后需要杀死excel进程,避免卡死。(因为它会开很多子进程)那么什么时间kill呢?需要考虑会不会影响在用的人。
  • 如果文件有密码,需要用只读模式打开,而xlwings会打开excel进程,询问是否输入密码。

所以对我来说,如果是需要读excel文件,那么用xlrd或者pandas都很方便;如果是写文件,可以用xlwings,因为格式控制比较方便。

安装

pip install xlwings

实例

import xlwings as xw

def test_xw():
    # visible:是否可见excel add_book:是否新建工作簿
    app = xw.App(visible=False, add_book=False)
    #wb = app.books.add()
    #wb = app.books.open("test.xlsx")
    wb = xw.Book("test.xlsx")
    # 保存
    #wb.save("after.xlsx")
    # 退出工作簿,可省略
    #wb.close()
    # 退出excel
    #app.quit()

    # 引用工作表
    sht = wb.sheets[0]
    #sht = wb.sheets["第一个sheet名"]

    # 引用单元格a1
    #rng = sht.range('a1')
    #rng = sht['a1']
    #rng = sht[0,0]

    # 打印值,默认float
    #print(rng.value)
    
    # 引用区域,闭区间。
    #rng = sht.range("a1:a3")
    #rng = sht["a1:a3"]
    #rng = sht[:3,0]
    # 这样返回的是list,默认float
    #print(rng.value)
    
    # 单个值插入
    #sht.range('c1').value = "Hello"
    # 默认按行插入,d1-g1依次变成1,2,3,4
    #sht.range("d1").value = [1,2,3,4]
    # 要按列插入需要transpose。这样是从c2开始,按列插数值
    #sht.range('c2').options(transpose=True).value = [5, 6, 7, 8]
    # 如果插入二维数据,指明左上角的位置即可
    #sht.range('c1').expand('table').value = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
    # 另存为
    #wb.save("after.xlsx")
    
    # 获取行数?
    rng = sht.range('a1').expand('table')
    nrows = rng.rows.count
    # 这样可以在范围内准确读取
    a = sht.range(f'a1:a{nrows}').value
    print(a)
    
    # 获取列数,方便读取某一行
    ncols = rng.columns.count
    # 这里获取第一行
    fst_col = sht[0,:ncols].value
    print(fst_col)
    
    wb.close()
    app.quit()

实用技巧

表格根据数据调节大小
开始写数据之前

sht.autofit()

写入excel时保证数字格式不变

ans = "'" + temp.replace(" ", "") # 在字符串前加单引号

杀死后台excel进程

os.system("taskkill /F /IM EXCEL.EXE")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值