使用 python 变量和动态单元格引用的 xlsxwriter 公式

xlsxwriter Formula using python variables and dynamic cell referencing

我正在尝试创建一批 xls 文件以输入 Monte Carlo 模拟。我正在使用 xlsxwriter,但我希望我的第四列使用一些 python 变量和一些来自 sheet 的单元格引用。知道我该怎么做吗?例如,如果我可以使用存储的 python 版本但我将其全部硬编码在

中,那么我在第四列中的公式会简单得多

在第四列公式中,我想插入一个随机变量 t 而不是 5 我已经在 python

中计算过
import numpy as np 
import xlsxwriter

#travel time as uniform (days)
low=4
high=8
t=np.random.uniform(low,high,size=1)


# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xls')
worksheet = workbook.add_worksheet()

# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)

# Write headers
#First column
worksheet.write('A1', 'DAYD')
#days = range(1,13)
worksheet.write_column('A2', range(1,13))
worksheet.write_column('A14', range(1,13))
worksheet.write_column('A26', range(1,13))
worksheet.write_column('A38', range(1,13))
worksheet.write_column('A50', range(1,16))


#Second Column
#crop=['TA' for i in range(64)]
worksheet.write('B1', 'CROP')
worksheet.write_column('B2', ('TA' for i in range(63)))

#Third Column
worksheet.write('C1', 'QUAL')
worksheet.write_column('C2', ([2]*12))
worksheet.write_column('C14', ([3]*12))
worksheet.write_column('C26', ([4]*12))
worksheet.write_column('C38', ([5]*12))
worksheet.write_column('C50', ([1]*15))

#fourth Column
worksheet.write('D1', 'COL')
worksheet.write_array_formula('D2:D64', '{=42 +((124-42)/(1+((EXP(**(5)***A2:A64*(124-42)))*(124-(16.949*EXP((-0.025)*C2:C64))/((16.949*EXP((-0.025)*C2:C64)-42)))))}')

workbook.close()

使用字符串格式化语法将变量添加到您正在编写的字符串中。

例如假设 t 是您要添加的随机变量,它是一个浮点数:

formula_string = '{=42 +((124-42)/(1+((EXP(%f*A2:A64*(124-42)))*(124-(16.949*EXP((-0.025)*C2:C64))/((16.949*EXP((-0.025)*C2:C64)-42)))))}' % t

worksheet.write_array_formula('D2:D64', formula_string)

另见

如果你想在每个单元格中使用不同的随机变量,那么你可以这样做

for i in range(2,65):
    t = np.random.uniform(low,high,size=1)
    formula_string = '{=42 +((124-42)/(1+((EXP(%f*A2:A64*(124-42)))*(124-(16.949*EXP((-0.025)*C2:C64))/((16.949*EXP((-0.025)*C2:C64)-42)))))}' % t
    location = 'D%d' % i
    worksheet.write_array_formula(location, formula_string)