• xlwings:python好用的excel操作模块


    前言

    由于月末对账需要,需要对比多个excel中的某一列数据,找出主表中某一列数据与其他几个excel表中的类似列存在的差异。本来wps有数据差异对比功能,但是需要收费,只能扣扣嗖嗖的自己写一个功能了,正好用一下xlwings

    过程

    1. 熟悉xlwings

    xlwings是什么

    xlwings是一个python模块,可以对excel进行几乎全部的操作,同时也可以替代vba,反向实现excel中调用python,来处理数据。同时支持mac和win

    基础操作

    1. xlwings包含的对象与操作4个层次:App(excel程序) —> Book(excel文档) —> Sheet(文档页) —> Range(文档单元格)
      xlwings对象结构
    2. 基础操作代码示例
    # 示例1
    import xlwings as xw
    wb = xw.Book('test.xlsx') # 如果只是打开单个文档的情况下,完全可以用xw来替代app
    sheet = wb.sheets[0]
    a1 = sheet.range('A1').value
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 示例2
    import xlwings as xw
    app = xw.App()
    book = app.books.open('test.xlsx')
    sheet = app.books['test.xlsx'].sheets[0]
    # 选择第一个单元格
    range_obj = sheet.range('A1')
    # 选取第一列
    range_obj = sheet.range('A1').expand('down')
    # 选取第一行
    range_obj = sheet.range('A1').expand('right')
    # 选取表格
    range_obj = sheet.range('A1').expand('table')
    # range的总行数
    rows_count = range_obj.rows.count
    # range的第一行行标
    row_index = range_obj.row
    # 返回range的列数
    columns_count = range_obj.columns.count
    # range的第一列列标
    column_index = range_obj.column
    # 设置range的颜色
    range_obj.color=(255,255,255)
    # 清除range的背景色
    range_obj.color=None
    # 获取公式或者输入公式
    range_obj.formula='=SUM(B1:B5)'
    # 存储单个数据
    range_obj.value=666
    # 横向存储多个数据
    sheet_obj.range('A1').value=[1,2,3]  #等同sheet_obj.range('a1:c1').value = [1,2,3]
    #纵向存储多个数据
    sheet_obj.range('A1').options(transpose=True).value=[1,2,3]
    #直接存储多维数据
    # 将2x2表格,储存在A1:B2中,如第一行1,2,第二行3,4
    sheet_obj.range('A1').options(expand='table').value=[[1,2],[3,4]] 
    # 同上
    sheet_obj.range('A1').expand('table').value = [[1,2],[3,4]]
    # 读取数据的方法一致,为赋值左侧方法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    2. 遇到问题

    excel版本过低,无法完全自动化。由于环境(windows,安装的excel版本非常老旧,有些格式支持差,还报错,需要人为介入,效率低),平时主力使用的几乎都是wps,所以打算直接调用wps

    3. 解决问题

    1. 先百度了一下,发现有不少解决方案,很多都是直接改库的源代码,尝试了下,是完全没有问题的。但是总觉得这种方案不可持续,说不定哪天更新了模块,又要去改回来
    2. 再仔细搜索,发现了一个外部引入,不需要修改源代码的方案:python使用xlwings操作wps
    # 运行程序前,传入自定义的impl就可以了
    _xl = COMRetryObjectWrapper(DispatchEx("ket.Application")) # 标识用wps运行
    impl = xw._xlwindows.App(add_book=False, xl=_xl)
    app = xw.App(visible=False, add_book=False, impl=impl) # visible可以控制是否展示wps
    
    • 1
    • 2
    • 3
    • 4

    总结

    xlwings,操作excel超级简单。使用打开文档的方案操作excel文档,程序退出后,会自动保存修改,无需特别操作

    参考与扩展

    1. xlwings
    2. xlwings官方文档-英文
  • 相关阅读:
    关于Greenplum为什么基于PostgreSQL而不是MySQL?
    Maven Jetty运行Spring MVC项目
    深入探究MinimalApi是如何在Swagger中展示的
    牛客网之SQL必知必会(1)-字符串的截取、拼接、字母大小写
    『忘了再学』Shell流程控制 — 39、特殊流程控制语句
    鄙视测试,理解测试,成为测试
    benchmark
    算法leetcode|81. 搜索旋转排序数组 II(rust重拳出击)
    vscode 打开后 默认terminal power shell 报错 名为“.C”的驱动器不存在。
    人工智能与大数据面试指南——Python
  • 原文地址:https://blog.csdn.net/qinmin1/article/details/126467699