Формула Блумберга в Excel из Python через Win32com - PullRequest
0 голосов
/ 16 мая 2018

Итак, это большая программа, в которой я пытаюсь автоматизировать многие задачи, но вот строчка, убивающая меня.Я использую 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.Formula вместо Cells.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=', '=')

ТАК, когда я записываю ее, я проверяю, что это не формула, а затем делаю ее формулой, и она отлично работает.

Все еще пытаюсь понять, так как это не самый лучший подход.

Спасибо

...