使用 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)
我正在尝试创建一批 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)