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