首页 > 解决方案 > 通过 Win32com 从 Python 到 Excel 的 Bloomberg 公式

问题描述

所以这是一个大程序,我正在尝试自动化许多任务,但这条线让我很头疼。我正在使用 Python 3.5.5 和 Win32com 连接 Python 和 Excel。

ws.Cells(i,j).Value = '=BDP("' + tick.lstrip().rstrip() + \
                      '";"CUST_TRR_RETURN_HOLDING_PER";' + \
                      '"CUST_TRR_Start_DT='+ (day - dt.timedelta(1)).strftime("%Y%m%d") + \
                      '";"CUST_TRR_END_DT=' + day.strftime("%Y%m%d") + \
                      '";"CUSTOM_TOTAL_RETURN_START_PRICE=' + str(round(sp,2)) + \
                      '";"CUSTOM_TOTAL_RETURN_END_PRICE=' + str(round(ep,2)) +'")'

所以如果我把开头改成

ws.Cells(i,j).Value = 'f=bdp....'

所以它不再是一个 Excel 公式,没有问题,一切都正确地转到 Excel。然后我可以手动删除f并且公式按预期计算。但是,当我按原样运行代码时,我收到一条错误消息,指出发生异常并且代码停止。我尝试了一个简单的公式'=2*6',效果很好。
我也尝试过Cells.FormulaCells.Value但我遇到了同样的问题。

这非常令人沮丧,因为这是我项目的最后一部分。之前和之后的一切都是功能性的,所以任何帮助都将不胜感激。

编辑

更奇怪的是,我刚试过这个,它有效

ws.Cells(i,j).Value = 'f=BDP("' + tick.lstrip().rstrip() + \
                      '";"CUST_TRR_RETURN_HOLDING_PER";' + \
                      '"CUST_TRR_Start_DT='+ (day - dt.timedelta(1)).strftime("%Y%m%d") + \
                      '";"CUST_TRR_END_DT=' + day.strftime("%Y%m%d") + \
                      '";"CUSTOM_TOTAL_RETURN_START_PRICE=' + str(round(sp,2)) + \
                      '";"CUSTOM_TOTAL_RETURN_END_PRICE=' + str(round(ep,2)) +'")'
ws.Cells(i,j).Replace('f=', '=')

所以当我把它写下来时,我确保它不是一个公式,然后我把它变成一个公式,它工作正常。

仍在尝试理解,因为这似乎不是最好的方法。

谢谢

标签: excelpython-3.xwin32com

解决方案


推荐阅读