添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本内容来自:https://gairuo.com

xlwings 是一个开源软件包,允许在 Windows 和 macOS 上使用 Python 自动化 Excel。用 Python 编写 Excel 宏和 UDF(UDF 仅适用于 Windows)。xlwings - 使用 Python 让 Excel 飞起来!

xlwings 是一个 BSD 许可的 Python 库,可以轻松地从 Excel 调用 Python,反之亦然:

  • 脚本编写:使用接近 VBA 的语法从 Python 自动化 Excel 或者与 Excel 交互
  • 宏:用干净、功能强大的 Python 代码替换凌乱的 VBA 宏
  • UDF:用 Python 编写用户定义函数(UDF)(仅限Windows)
  • REST API: 通过 REST API 公开 Excel 工作簿
  • 完全支持 Numpy 阵列和 Pandas Series/DataFrames,xlwings 支持的工作簿易于分发,并可在 Windows 和 Mac 上使用

    免费的 xlwings 包括 xlwings 包中除 pro 文件夹以外的所有文件,即 xlwings.pro 子包。xlwings PRO 的目的是为 xlwings 的持续维护和增强提供资金。

    xlwings 中对于一个 Excel 文件有以下基本概念和三个重要对象:

  • book:工作簿对象,就是一个独立的 Excel 文件
  • sheet:工作表对象,就是一个表,一个文件可以有多个表
  • range:一个单元格或者一个范围的若干表格
  • 解释如下图:

    pip install xlwings
    # or conda:
    conda install xlwings
    # 安装所有依赖
    pip install "xlwings[all]"
    # 安装或升级到最新版本
    pip install --upgrade xlwings
    pip install -U xlwings
    

    建立与工作簿的连接:

    import xlwings as xw
    # 这将创建一个新工作簿
    wb = xw.Book()
    # 连接到打开的文件或当前工作目录中的文件
    wb = xw.Book('file.xlsx')
    # 在Windows上:使用原始字符串转义反斜杠
    wb = xw.Book(r'C:\path\to\file.xlsx')
    # 如果在两个 Excel 实例中打开同一个文件
    # 则需要完全限定该文件并包含应用程序实例
    # 可通过 xw.apps.keys() 找到应用程序实例密钥(PID)
    xw.apps[10559].books['file.xlsx']
    

    实例化 sheet 对象:

    sheet = wb.sheets['Sheet1']
    

    从范围读取/写入值非常简单:

    >>> sheet.range('A1').value = 'Foo 1'
    >>> sheet.range('A1').value
    'Foo 1'
    

    范围扩展:

    sheet.range('A1').value = [['Foo 1', 'Foo 2', 'Foo 3'],
                               [10.0, 20.0, 30.0]]
    sheet.range('A1').expand().value
    # [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]
    

    pandas 的应用:

    >>> import pandas as pd
    >>> df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])
    >>> sheet.range('A1').value = df
    >>> sheet.range('A1').options(pd.DataFrame, expand='table').value
    0.0  1.0  2.0
    1.0  3.0  4.0
    

    Matplotlib 图形的插入:

    >>> import matplotlib.pyplot as plt
    >>> fig = plt.figure()
    >>> plt.plot([1, 2, 3, 4, 5])
    [<matplotlib.lines.Line2D at 0x1071706a0>]
    >>> sheet.pictures.add(fig, name='MyPlot', update=True)
    <Picture 'MyPlot' in <Sheet [Workbook4]Sheet1>>
    

    保存 Excel:

    wb.save()
    wb.save(r'C:\path\to\new_file_name.xlsx')
    wb.save('file_name.xlsx')
    

    读取 Excel

    在将数据读取/写入活动的工作表时,不需要文件对象:

    >>> import xlwings as xw
    >>> xw.Range('A1').value = 'something'
    

    xw.Book 提供了连接表格文件的最简单方法:如果同一文件在多个实例中打开,它会在所有应用程序实例中查找该文件并返回错误。要连接到活动应用程序实例中的文件,请使用xw.books,要引用特定应用程序,请使用:

    # 或者类似 xw.apps[10559] 的东西对于现有的应用程序
    # 通过 xw.apps.keys() 获取可用的PID
    >>> app = xw.App()
    >>> app.books['Book1']
    

    请注意,您通常应将应用程序用作上下文管理器,因为这将确保Excel实例已关闭并再次正确清理:

    with xw.App() as app:
        book = app.books['Book1']
    

    以下是读取/定义 Excel 或者创建一个 文件对象(xw.Book 和 xw.books):

    # 新的电子簿
    xw.Book()
    xw.books.add()
    # 未保存 book
    xw.Book('Book1')
    xw.books['Book1']
    # 通过全名(路径)
    xw.Book(r'C:/path/to/file.xlsx')
    xw.books.open(r'C:/path/to/file.xlsx')
    

    一些激活和选择方法:

    # 活动应用程序(即Excel实例)
    >>> app = xw.apps.active
    # 活动 book
    >>> wb = xw.books.active  # in active app
    >>> wb = app.books.active  # in specific app
    # Active sheet
    >>> sheet = xw.sheets.active  # in active book
    >>> sheet = wb.sheets.active  # in specific book
    # Range on active sheet
    >>> xw.Range('A1')  # on active sheet of active book of active app
    

    可以使用A1表示法、Excel基于1开头的索引(1-based indices)元组、命名范围或两个范围对象实例化范围:

    xw.Range('A1')
    xw.Range('A1:C3')
    xw.Range((1,1))
    xw.Range((1,1), (3,3))
    xw.Range('NamedRange')
    xw.Range(xw.Range('A1'), xw.Range('B2'))
    # 完全的操作
    xw.apps[763].books[0].sheets[0].range('A1')
    xw.apps(10559).books(1).sheets(1).range('A1')
    xw.apps[763].books['Book1'].sheets['Sheet1'].range('A1')
    xw.apps(10559).books('Book1').sheets('Sheet1').range('A1')
    

    范围索引/切片:

    >>> rng = xw.Book().sheets[0].range('A1:D5')
    >>> rng[0, 0]
    # <Range [Workbook1]Sheet1!$A$1>
    >>> rng[1]
    # <Range [Workbook1]Sheet1!$B$1>
    >>> rng[:, 3:]
    # <Range [Workbook1]Sheet1!$D$1:$D$5>
    >>> rng[1:3, 1:3]
    # <Range [Workbook1]Sheet1!$B$2:$C$3>
    

    范围快捷方式:

    >>> sheet = xw.Book().sheets['Sheet1']
    >>> sheet['A1']
    # <Range [Book1]Sheet1!$A$1>
    >>> sheet['A1:B5']
    # <Range [Book1]Sheet1!$A$1:$B$5>
    >>> sheet[0, 1]
    # <Range [Book1]Sheet1!$B$1>
    >>> sheet[:10, :10]
    # <Range [Book1]Sheet1!$A$1:$J$10>
    

    对象层次结构(链式操作),以下显示了对象层次结构的示例,即如何从应用程序到范围对象并一直返回:

    >>> rng = xw.apps[10559].books[0].sheets[0].range('A1')
    >>> rng.sheet.book.app
    <Excel App 10559>
    
  • https://github.com/xlwings/xlwings
  • https://docs.xlwings.org/en/stable/
  • https://docs.xlwings.org/en/stable/api.html
  • 认识 Python
  • 环境搭建
  • 基础语法
  • print() 打印输出
  • 格式化字符串
  • 变量
  • 命令行执行脚本
  • Python 数据类型
  • 数据类型介绍
  • 数字 Number
  • 字符串 String
  • 布尔型 Boolean
  • 列表 List
  • 元组 Tuple
  • 字典 Dict
  • 集合 Set
  • 序列类型
  • Python 流程控制
  • 什么是流程控制
  • while 语句
  • if else 条件语句
  • for 循环语句
  • range() 函数
  • with as 上下文管理器
  • match case 结构化模式匹配
  • assert 断言
  • Python 函数
  • 定义函数
  • 什么是函数
  • 递归函数
  • 函数的参数
  • 匿名函数 lambda
  • 装饰器
  • 内置函数
  • 可调用对象
  • 高阶函数
  • map()
  • filter()
  • zip()
  • reduce()
  • Python 错误和异常
  • 什么是错误和异常
  • 语法错误
  • 异常
  • 处理异常
  • 自定义异常
  • 预定义清理
  • Python 的类
  • Python 的对象
  • 什么是「类」
  • 定义类
  • 函数和方法的区别
  • 实例属性
  • 类属性
  • 内置类属性
  • 私有变量
  • 类方法
  • 静态方法
  • 关于对象属性的内置函数
  • 元类
  • 类的继承
  • 特殊属性
  • 特殊方法
  • 鸭子类型
  • Python 的模块(包)
  • 什么是模块和库
  • Python 安装三方库
  • 模块、库、包和框架的区别
  • 库的导入使用
  • 编写模块
  • `__init__`.py 文件 有更新
  • 内置标准库介绍
  • Python 三方库介绍
  • Python 程序运行原理
  • 星号表达式
  • 单下划线变量
  • 迭代器和生成器
  • 类型注解
  • 多任务处理
  • 异步编程
  • 通用操作运算
  • IO 编程
  • 日期和时间
  • 单元测试
  • Python 教程更新日志
  • Python 速查手册
  • Strftime 时间字符格式化手册
  • Python 基础使用案例
  • PEP8 规范
  • Python 相关话题
  • Python 练习题
  •