向单元格中添加公式

本小节讨论用xlwings包操作公式,即通过编程的方式操作公式。首先介绍向工作表单元格中添加公式。用xlwings包向单元格中添加公式有多种方法。

可以直接利用Range对象的Value属性向单元格输入普通公式,例如:

code.python
sht.Range('A7').Value='=A1*B2'
sht.Range('A8').Value='=SUM(A1:A5)'

其中sht表示工作表对象,是一个COM对象。

可以用Range对象的Formula属性输入A1样式的公式,例如:

code.python
sht.Range('C7').Formula='=$A$1+$A$5'

用Range对象的FormulaR1C1属性输入R1C1样式的公式,例如:

code.python
sht.Range('C8').FormulaR1C1='=SQRT(R1C1)'

用Range对象的FormulaArray属性输入数组公式,例如:

code.python
sht.Range('E7').FormulaArray='=SUM(A1:A5*B1:B5)'

使用Range对象的Value属性,用Excel应用对象的Evaluate方法引用公式,例如:

code.python
sht.Range('G7').Value=app.api.Evaluate('=AVERAGE($A$1:$A$5)')

使用Excel应用对象的工作表函数实现公式,例如:

code.python
sht.Range('G8').Value=app.api.WorksheetFunction.Average(sht.Range('A1:A5'))

示例代码如下所示:

code.python
import xlwings as xw    #导入xlwings
import os    #导入os
root = os.getcwd()    #获取当前路径
#创建Excel应用窗口,可见,不添加工作簿
app=xw.App(visible=True, add_book=False)
#打开数据文件,可写
bk=app.books.open(fullname=root+r'\06 添加公式.xlsx',read_only=False)
sht=bk.api.Sheets(1)    #获取工作表
#输入普通公式
sht.Range('A7').Value='=A1*B2'
sht.Range('A8').Value='=SUM(A1:A5)'
#用Formula属性输入A1样式的公式
sht.Range('C7').Formula='=$A$1+$A$5'
#用FormulaR1C1属性输入R1C1样式的公式
sht.Range('C8').FormulaR1C1='=SQRT(R1C1)'
#用FormulaArray属性输入数组公式
sht.Range('E7').FormulaArray='=SUM(A1:A5*B1:B5)'
#使用Evaluate方法
sht.Range('G7').Value=app.api.Evaluate('=AVERAGE($A$1:$A$5)')
#使用WorksheetFunction属性
sht.Range('G8').Value=app.api.WorksheetFunction.Average(sht.Range('A1:A5'))
bk.save()    #保存工作簿
bk.close()    #关闭工作簿
app.kill()    #关闭应用

在脚本窗口中选择Run→Run Module命令,运行脚本,查看各操作的结果如图3-1所示。

Document Image

图3-1 在单元格中添加公式