python正确公式_如何让python生成的excel文档正确计算数组公式

我用python3.6和openpyxl生成一些excel文件。在

在某一点上,我必须计算一部分数据的标准差。在excel中,这是用数组公式完成的。写出正确的公式很容易,但当我要求excel计算时,它会显示“NAME?”,除非我手动输入每个单元格并按CTRL+SHIFT+enter。

然而,在这样做之前,公式显示了正确的大括号,所以我不确定我在改变什么。

因为我们正在讨论的是相当多的细胞手动进入每个细胞是不可行的。有没有办法让excel或Python在excel中正确执行公式?如果需要,我可以使用其他库或编写VB脚本。在

下面是python中最简单可行的工作示例:from openpyxl import Workbook

from openpyxl.utils.cell import get_column_letter

from random import random

from random import randrange

wb = Workbook()

ws = wb.create_sheet()

ws.title = 'Data'

#generate random data

for i in range(100):

ws.cell(column=1, row=1+i, value=random()*100)

ws.cell(column=2, row=1+i, value=randrange(1,5))

#calculate standard deviations for specific integer values

for i in range(4):

ws.cell(column=4+i, row=1, value='STDEV {0}'.format(i+1))

ws.cell(column=4+i, row=2, value='=STDEV.P(IF(B1:B100={0},A1:A100," "))'.format(i+1))

targetVal = '{0}2'.format(get_column_letter(4+i))

ws.formula_attributes[targetVal] = {'t': 'array', 'ref': targetVal}

#cleaning up

ws = wb.get_sheet_by_name("Sheet")

wb.remove_sheet(ws)

wb.save("fTest.xlsx")

对这个例子的快速解释:我在A列生成100个0到100之间的随机数,在B列生成1到4之间的整数。

在包含STDEV 1的单元格下面,我计算A列中所有在B列中有1的值的标准偏差,其他STDEV列也是如此。

生成的excel文档应具有“#名称?”如果您的excel设置为自动计算。如果输入公式并按CTRL+SHIFT+enter键执行,则公式将正确执行。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值