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键执行,则公式将正确执行。在


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部