当前位置:

首页 > 编程开发 > 使用 Python 自动化 Excel 公式和函数:完整指南

使用 Python 自动化 Excel 公式和函数:完整指南

在日常数据处理工作里,Excel 公式和函数无疑是最核心的计算工具,但手动一条条去输、去管理,既费时间又容易出岔子。要是能用 Python 来帮我们批量插入和管理公式,那就能做到自动化计算逻辑的动态生成,还能确保数据处理的准确性。这篇内容就来聊聊,怎么用 Python 往 Excel 工作表中塞进各

在日常数据处理工作里,Excel 公式和函数无疑是最核心的计算工具,但手动一条条去输、去管理,既费时间又容易出岔子。要是能用 Python 来帮我们批量插入和管理公式,那就能做到自动化计算逻辑的动态生成,还能确保数据处理的准确性。这篇内容就来聊聊,怎么用 Python 往 Excel 工作表中塞进各种公式和函数——不管是基础算术运算,还是内置函数、数组公式、命名范围,都一并覆盖。这些方法在实际的财务报表自动化、数据分析管道搭建、批量数据处理等等场景里,都非常实用。

环境准备

开工前,先把依赖库装好:

 复制代码pip install Spire.XLS

这个库提供了完整的 Excel 文件操作 API,支持公式插入、计算执行和文件格式转换,基本搞定了我们需要的所有能力。

插入基本公式

Excel 里公式长什么样?以等号(=)开头,后面跟着常量、单元格引用、运算符和函数调用。用 Python 插入公式时,其实只需要把公式的字符串赋值给单元格的 Formula 属性就行。

下面的例子展示了如何插入各种基础公式:

 复制代码from spire.xls import *
from spire.xls.common import *# 创建工作簿
workbook = Workbook()
sheet = workbook.Worksheets[0]# 设置测试数据
sheet.Range["B2"].NumberValue = 7.3
sheet.Range["C2"].NumberValue = 5
sheet.Range["D2"].NumberValue = 8.2# 插入字符串公式
sheet.Range["A4"].Text = '="hello"'
sheet.Range["B4"].Formula = '="hello"'# 插入算术运算公式
sheet.Range["A5"].Text = "=1+2+3+4+5-6-7+8-9"
sheet.Range["B5"].Formula = "=1+2+3+4+5-6-7+8-9"# 插入乘法运算
sheet.Range["A6"].Text = "=33*3/4-2+10"
sheet.Range["B6"].Formula = "=33*3/4-2+10"# 引用其他单元格
sheet.Range["A7"].Text = "=Sheet1!$B$2"
sheet.Range["B7"].Formula = "=Sheet1!$B$2"# 引用单元格区域并计算平均值
sheet.Range["A8"].Text = "=A VERAGE(Sheet1!$B$2:$D$2)"
sheet.Range["B8"].Formula = "=A VERAGE(Sheet1!$B$2:$D$2)"# 保存文件
workbook.Sa veToFile("BasicFormulas.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

在这个示例里,其实展示了几种常用的方式:

  • 字符串常量:用双引号把文本包起来就行
  • 算术运算:加减乘除和括号优先级,都支持
  • 单元格引用:加个 $ 符号就成了绝对引用
  • 区域引用:冒号指定连续单元格范围

使用内置函数

Excel 自带的几百个内置函数覆盖了数学、统计、日期时间、逻辑判断、文本处理等等领域。那么怎么用 Python 把这事儿办了?

数学和统计函数

 复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()
sheet = workbook.Worksheets[0]currentRow = 1# COUNT 函数 - 统计参数个数
sheet.Range[f"A{currentRow}"].Text = "=Count(3,5,8,10,2,34)"
sheet.Range[f"B{currentRow}"].Formula = "=Count(3,5,8,10,2,34)"
currentRow += 1# SUM 函数 - 求和
sheet.Range[f"A{currentRow}"].Text = "=SUM(18,29)"
sheet.Range[f"B{currentRow}"].Formula = "=SUM(18,29)"
currentRow += 1# A VERAGE 函数 - 平均值
sheet.Range[f"A{currentRow}"].Text = "=A VERAGE(12,45)"
sheet.Range[f"B{currentRow}"].Formula = "=A VERAGE(12,45)"
currentRow += 1# MAX 和 MIN 函数
sheet.Range[f"A{currentRow}"].Text = "=MAX(10,30)"
sheet.Range[f"B{currentRow}"].Formula = "=MAX(10,30)"
currentRow += 1sheet.Range[f"A{currentRow}"].Text = "=MIN(5,7)"
sheet.Range[f"B{currentRow}"].Formula = "=MIN(5,7)"
currentRow += 1# ROUND 函数 - 四舍五入
sheet.Range[f"A{currentRow}"].Text = "=ROUND(7,3)"
sheet.Range[f"B{currentRow}"].Formula = "=ROUND(7,3)"
currentRow += 1# SQRT 函数 - 平方根
sheet.Range[f"A{currentRow}"].Text = "=SQRT(40)"
sheet.Range[f"B{currentRow}"].Formula = "=SQRT(40)"
currentRow += 1workbook.Sa veToFile("MathFunctions.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

日期和时间函数

处理日期和时间是 Excel 自动化里很常见的需求。下面的代码演示了怎么用日期时间相关的函数:

 复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()
sheet = workbook.Worksheets[0]# NOW 函数 - 当前日期时间
sheet.Range["A1"].Text = "=NOW()"
sheet.Range["B1"].Formula = "=NOW()"
sheet.Range["B1"].Style.NumberFormat = "yyyy-MM-DD HH:mm:ss"# DATE 函数 - 构造日期
sheet.Range["A2"].Text = "=DATE(2024,1,15)"
sheet.Range["B2"].Formula = "=DATE(2024,1,15)"
sheet.Range["B2"].Style.NumberFormat = "yyyy-MM-DD"# TIME 函数 - 构造时间
sheet.Range["A3"].Text = "=TIME(14,30,0)"
sheet.Range["B3"].Formula = "=TIME(14,30,0)"
sheet.Range["B3"].Style.NumberFormat = "HH:mm:ss"# YEAR、MONTH、DAY 函数 - 提取日期部分
sheet.Range["A4"].Text = "=YEAR(NOW())"
sheet.Range["B4"].Formula = "=YEAR(NOW())"sheet.Range["A5"].Text = "=MONTH(NOW())"
sheet.Range["B5"].Formula = "=MONTH(NOW())"sheet.Range["A6"].Text = "=DAY(NOW())"
sheet.Range["B6"].Formula = "=DAY(NOW())"# HOUR、MINUTE、SECOND 函数 - 提取时间部分
sheet.Range["A7"].Text = "=HOUR(NOW())"
sheet.Range["B7"].Formula = "=HOUR(NOW())"sheet.Range["A8"].Text = "=MINUTE(NOW())"
sheet.Range["B8"].Formula = "=MINUTE(NOW())"sheet.Range["A9"].Text = "=SECOND(NOW())"
sheet.Range["B9"].Formula = "=SECOND(NOW())"workbook.Sa veToFile("DateTimeFunctions.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

逻辑和条件函数

逻辑函数用来做条件判断和执行业务规则,很实用:

 复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()
sheet = workbook.Worksheets[0]# IF 函数 - 条件判断
sheet.Range["A1"].Text = "=IF(10>5, "大于", "小于")"
sheet.Range["B1"].Formula = "=IF(10>5, "大于", "小于")"# AND 函数 - 逻辑与
sheet.Range["A2"].Text = "=AND(TRUE, TRUE)"
sheet.Range["B2"].Formula = "=AND(TRUE, TRUE)"# OR 函数 - 逻辑或
sheet.Range["A3"].Text = "=OR(FALSE, TRUE)"
sheet.Range["B3"].Formula = "=OR(FALSE, TRUE)"# NOT 函数 - 逻辑非
sheet.Range["A4"].Text = "=NOT(FALSE)"
sheet.Range["B4"].Formula = "=NOT(FALSE)"workbook.Sa veToFile("LogicFunctions.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

文本处理函数

文本函数在字符串操作和数据清洗上很有一手:

 复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()
sheet = workbook.Worksheets[0]# LEN 函数 - 字符串长度
sheet.Range["A1"].Text = '=LEN("Hello World")'
sheet.Range["B1"].Formula = '=LEN("Hello World")'# MID 函数 - 提取子字符串
sheet.Range["A2"].Text = '=MID("Hello World",7,5)'
sheet.Range["B2"].Formula = '=MID("Hello World",7,5)'# VALUE 函数 - 文本转数值
sheet.Range["A3"].Text = '=VALUE("123")'
sheet.Range["B3"].Formula = '=VALUE("123")'workbook.Sa veToFile("TextFunctions.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

使用数组公式

数组公式可以对多个值执行计算并返回单个或多个结果,在做矩阵运算和批量数据处理时尤其好用。

 复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()
sheet = workbook.Worksheets[0]# 准备数据
sheet.Range["A1"].NumberValue = 1
sheet.Range["A2"].NumberValue = 2
sheet.Range["A3"].NumberValue = 3sheet.Range["B1"].NumberValue = 4
sheet.Range["B2"].NumberValue = 5
sheet.Range["B3"].NumberValue = 6sheet.Range["C1"].NumberValue = 7
sheet.Range["C2"].NumberValue = 8
sheet.Range["C3"].NumberValue = 9# 插入数组公式 - LINEST 函数执行线性回归分析
sheet.Range["A5:C6"].FormulaArray = "=LINEST(A1:A3,B1:C3,TRUE,TRUE)"# 计算所有公式的值
workbook.CalculateAllValue()workbook.Sa veToFile("ArrayFormulas.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

这里有几个关键点要记住:

  • 插入数组公式用的是 FormulaArray 属性,不是 Formula
  • 数组公式通常需要跨越多个单元格区域
  • 别忘了调用 CalculateAllValue() 方法,这样才能确保公式被正确计算出来

使用 SUBTOTAL 函数

SUBTOTAL 函数可以对数据列表做聚合计算,而且能自动忽略隐藏行——这在做交互式报表时特别有用。

 复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()
sheet = workbook.Worksheets[0]# 准备数据
for row in range(1, 4):
    sheet.Range[f"A{row}"].NumberValue = row
    sheet.Range[f"B{row}"].NumberValue = row + 3
    sheet.Range[f"C{row}"].NumberValue = row + 6# 插入不同的 SUBTOTAL 函数
# 1 表示 A VERAGE
sheet.Range["A5"].Formula = "=SUBTOTAL(1,A1:C3)"# 2 表示 COUNT
sheet.Range["B5"].Formula = "=SUBTOTAL(2,A1:C3)"# 5 表示 MIN
sheet.Range["C5"].Formula = "=SUBTOTAL(5,A1:C3)"# 计算公式
workbook.CalculateAllValue()workbook.Sa veToFile("SubtotalFormulas.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

SUBTOTAL 函数的第一个参数决定了计算类型:

  • 1: A VERAGE(平均值)
  • 2: COUNT(计数)
  • 3: COUNTA(非空计数)
  • 4: MAX(最大值)
  • 5: MIN(最小值)
  • 9: SUM(求和)

使用命名范围和公式

命名范围这个功能,最直观的好处就是让公式变得好读又好维护。把复杂的单元格引用替换成有意义的名称,公式一看就懂。

 复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()
sheet = workbook.Worksheets[0]# 设置数据
sheet.Range["A1"].Value = "10"
sheet.Range["A2"].Value = "20"# 创建命名范围
namedRange = workbook.NameRanges.Add("SumRange")
namedRange.RefersToRange = sheet.Range["A1:A2"]# 在公式中使用命名范围
sheet.Range["C1"].Formula = "=SUM(SumRange)"# 也可以直接定义命名公式
namedFormula = workbook.NameRanges.Add("TotalCalc")
namedFormula.NameLocal = "=SUM(A1+A2)"
sheet.Range["C2"].Formula = "TotalCalc"workbook.Sa veToFile("NamedRangeFormulas.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

这么做的优势很明显:

  • 提高可读性:=SUM(SumRange) 比 =SUM(A1:A2) 清晰得多
  • 便于维护:改了命名范围的引用,所有用到了这个名称的公式都会自动更新
  • 减少错误:不用再手动去输入那些复杂的单元格引用了

实用技巧

格式化公式单元格

要把公式单元格和数据单元格区分出来,可以给它们套上特殊的格式:

 复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()
sheet = workbook.Worksheets[0]# 插入公式
sheet.Range["A1"].Formula = "=SUM(B1:B10)"# 设置公式单元格背景色
sheet.Range["A1"].Style.Color = Color.get_LightYellow()# 添加边框
sheet.Range["A1"].Style.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin
sheet.Range["A1"].Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thinworkbook.Sa veToFile("FormattedFormula.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

强制计算公式值

有些场景下,我们可能需要立马拿到计算结果,而不想保留公式本身:

 复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()
sheet = workbook.Worksheets[0]sheet.Range["A1"].NumberValue = 10
sheet.Range["A2"].NumberValue = 20
sheet.Range["A3"].Formula = "=A1+A2"# 计算所有公式
workbook.CalculateAllValue()# 此时 A3 的值已经是 30
result = sheet.Range["A3"].Value
print(f"计算结果: {result}")workbook.Sa veToFile("CalculatedFormula.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

处理跨工作表引用

如果公式要引用其他工作表中的数据,语法就是用工作表名称加感叹号:

 复制代码from spire.xls import *
from spire.xls.common import *workbook = Workbook()# 创建两个工作表
sheet1 = workbook.Worksheets[0]
sheet1.Name = "Data"
sheet2 = workbook.Worksheets.Add("Calculation")# 在第一个工作表中设置数据
sheet1.Range["A1"].NumberValue = 100
sheet1.Range["A2"].NumberValue = 200# 在第二个工作表中引用第一个工作表的数据
sheet2.Range["A1"].Formula = "=Data!A1+Data!A2"workbook.CalculateAllValue()
workbook.Sa veToFile("CrossSheetFormula.xlsx", ExcelVersion.Version2010)
workbook.Dispose()

总结

这篇文章梳理了用 Python 在 Excel 里自动化公式和函数的几种常用手法,包括:

  • 插入基本算术公式和单元格引用
  • 使用数学、统计、日期时间、逻辑和文本处理函数
  • 用数组公式做复杂计算
  • 利用 SUBTOTAL 函数搞灵活的聚合运算
  • 借助命名范围让公式更好读、更好维护

掌握了这些技术,开发者就能:

  • 批量生成带有复杂计算逻辑的电子表格
  • 自动化财务模型和数据分析报告
  • 动态构建基于条件的计算公式
  • 大幅提升数据处理的一致性和准确性

把 Python 的编程能力和 Excel 的计算功能结合起来,确实能搭建出很强大的数据处理自动化方案——效率提上去了,人为错误也降下来了。可以说,这才是现代数据工作里值得投入的方向。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 Python
相关文章 更多
git解决代码冲突的详细步骤与操作方法
git解决代码冲突的详细步骤与操作方法

遇到Git合并冲突别慌张,本文详解冲突产生的原因及标准处理流程,涵盖查看冲突文件、理解标记含义、手动修改代码及完成合并提交的完整步骤,助你高效解决协作开发中的代码冲突问题。

Java获取当前时间戳:System.currentTimeMillis与Instant对比
Java获取当前时间戳:System.currentTimeMillis与Instant对比

深入对比Java中获取当前时间戳的两种主流方式:System.currentTimeMillis与java.time.Instant。分析二者的精度差异、API设计、时钟回拨影响与实际选型建议。

大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

Java常量命名规范与接口常量反模式最佳实践
Java常量命名规范与接口常量反模式最佳实践

深入解析Java常量命名标准、大写下划线语义规则,剖析接口常量反模式的危害与本质原因,并提供枚举、不可实例化常量工具类等工业级最佳替代方案。

c语言段错误处理方法及排查解决步骤
c语言段错误处理方法及排查解决步骤

针对C语言常见的段错误(Segmentation fault)问题,详细剖析内存非法访问根因,提供结合GDB、Core Dump与AddressSanitizer的标准化排查解决步骤与预防方法。

windsurf开发工具安装与使用详细教程
windsurf开发工具安装与使用详细教程

本文提供全面的Windsurf开发工具安装与使用详细教程,覆盖客户端下载安装、环境配置与VS Code插件迁移、Cascade核心协作中枢使用技巧、Chat与Write双模式实战及高效开发规范。

Flutter状态管理框架有哪些?常用框架选择指南
Flutter状态管理框架有哪些?常用框架选择指南

全面盘点Flutter主流状态管理框架,深度解析Provider、Riverpod、Bloc与GetX的核心机制、优缺点及适用场景,提供系统化的状态管理选型指南。

Java抽象方法修饰符限制:为何不能用private或static
Java抽象方法修饰符限制:为何不能用private或static

深入剖析Java中抽象方法为何严禁使用private和static修饰符。从面向对象契约规范、方法继承重写、JVM动态绑定(invokevirtual)与静态解析(invokestatic)等底层机制展开详细推导,结合编译报错示例与全景对比,彻底理清修饰符限制背后的设计逻辑。

tomcat启动失败的原因和解决办法详解
tomcat启动失败的原因和解决办法详解

详细分析 Tomcat 启动失败的常见原因,并提供可操作的排查和解决方案。

uniapp网络请求拦截怎么设置及配置方法
uniapp网络请求拦截怎么设置及配置方法

详细讲解uni-app中网络请求拦截的配置方法与实现路径,包含uni.addInterceptor原生API拦截与Promise二次封装方案、Token注入、全局错误处理及踩坑提醒。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
IntelliJ IDEA macOS版
IntelliJ IDEA macOS版
Mac

IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

PyCharm macOS版
PyCharm macOS版
Mac

JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

WebStorm macOS版
WebStorm macOS版
Mac

JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

WINDOWS 更多
IntelliJ IDEA Windows版
IntelliJ IDEA Windows版
Windows

JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

PhpStorm Windows版
PhpStorm Windows版
Windows

PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

PyCharm Windows版
PyCharm Windows版
Windows

PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,