办公自动化|xlwings使用公式和函数

news/2025/2/26 18:21:01

1. 介绍 xlwings

xlwings 是一个强大的 Python 库,能够用于 Excel 自动化操作。除了基本的数据读写和格式设置,xlwings 还支持写入 Excel 公式、调用内置函数以及创建自定义函数,使得 Python 与 Excel 之间的交互更加灵活。


2. 在单元格中使用 Excel 公式

xlwings 允许我们直接在 Excel 单元格中写入 Excel 公式,与手动输入公式的效果相同。例如:

写入简单公式

import xlwings as xw

wb = xw.Book()
sht = wb.sheets[0]

# 在 A1 单元格写入求和公式
sht.range("A1").value = "=SUM(B1:B5)"

此代码将在 Excel 的 A1 单元格中写入 =SUM(B1:B5) 公式,使其计算 B1 到 B5 之间的数值和。

动态引用单元格

可以使用 Python 格式化字符串动态生成 Excel 公式。

row = 10
sht.range("C1").value = f"=SUM(A1:A{row})"

上述代码将 =SUM(A1:A10) 公式写入 C1 单元格。


3. 调用 Excel 内置函数

除了直接写入公式,我们还可以使用 xlwings 调用 Excel 内置函数,并获取计算结果。

计算最大值

sht.range("A1").value = [10, 20, 30, 40, 50]
max_value = sht.range("B1").formula = "=MAX(A1:A5)"
print(sht.range("B1").value)  # 输出 50

这里 formula=MAX(A1:A5) 公式写入 B1,并立即计算得到最大值 50。

调用日期相关函数

sht.range("D1").value = "=TODAY()"
print(sht.range("D1").value)  # 输出当前日期

这将在 D1 单元格插入 =TODAY() 公式,并返回当前系统日期。


4. 使用 xlwings 自定义函数

xlwings 允许 Python 代码作为 Excel 用户定义函数(UDF, User Defined Function)。这意味着我们可以使用 Python 编写自定义 Excel 公式,并在 Excel 中像使用普通公式一样调用它们。

启用 xlwings UDF

首先,确保 Excel 启用了 xlwings 加载项,并使用 @xw.func 装饰器定义 Python UDF。

定义 Python 自定义函数

import xlwings as xw

@xw.func  # 将此函数注册为 Excel 公式
def add_numbers(x, y):
    return x + y

在 Excel 中输入:

=add_numbers(10, 20)

将返回 30

自定义平方根函数

import math

@xw.func
def sqrt_number(x):
    return math.sqrt(x)

然后在 Excel 中输入:

=sqrt_number(25)

将返回 5.0

UDF 调用外部 API

我们甚至可以让 Excel 通过 Python 调用 Web API,例如获取当前汇率。

import requests

@xw.func
def get_exchange_rate(currency):
    url = f"https://api.exchangerate-api.com/v4/latest/{currency}"
    response = requests.get(url).json()
    return response['rates']['USD']

在 Excel 中输入:

=get_exchange_rate("EUR")

即可获得当前 1 欧元兑美元的汇率。


5. 结论

使用 xlwings,可以轻松在 Excel 中写入公式、调用 Excel 内置函数,并通过 UDF 创建自定义函数,将 Python 的强大功能引入 Excel,实现更高效的数据处理与计算。


http://www.niftyadmin.cn/n/5869051.html

相关文章

智慧城市与安防监控:PoE交换机在高清视频监控中的优势

安防监控系统,尤其是高清摄像头(如IP摄像头、PTZ云台、热成像摄像头)在现代安防应用中大量部署,这些设备对电力和数据的传输需求非常高。传统的电源布线方式往往不能满足大规模、高质量设备的需求,而PoE交换机不仅解决…

跳跃游戏两则

跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 思路 这里只…

Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作

注:英文引文,机翻未校。 在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作 作者: 2daygeek 译者: LCTT DarkSun 为服务器打补丁是 Linux 系统管理员的一项重要任务,为的是让系统更加稳定,性能更加…

Web核心、HTTP

JavaWeb技术栈 B/S 架构:Browser/Server,浏览器/服务器 架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览…

智慧物流小程序(论文源码调试讲解)

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专…

2.部署kafka:9092

官方文档:http://kafka.apache.org/documentation.html (虽然kafka中集成了zookeeper,但还是建议使用独立的zk集群) Kafka3台集群搭建环境: 操作系统: centos7 防火墙:全关 3台zookeeper集群内的机器,1台logstash 软件版本: …

java后端开发day18--学生管理系统

(以下内容全部来自上述课程) 1.业务分析并搭建主菜单 1.需求 采取控制台的方式去书写学生管理系统 2.分析 1.初始菜单 2.学生类 属性:id,姓名,年龄,家庭住址 3.添加功能 键盘录入每一个学生信息并…

嵌入式开发:傅里叶变换(4):在 STM32上面实现FFT(基于STM32L071KZT6 HAL库+DSP库)

目录 步骤 1:准备工作 步骤 2:创建 Keil 项目,并配置工程 步骤 3:在MDK工程上添加 CMSIS-DSP 库 步骤 5:编写代码 步骤 6:配置时钟和优化 步骤 7:调试与验证 步骤 8:优化和调…