Пересчет формулы Excel не работает - PullRequest
0 голосов
/ 28 мая 2019

У меня есть код Python, который запускается из рабочей книги Excel и экспортирует таблицу в рабочую книгу путем вставки из буфера обмена.

В кадре данных Python, который экспортируется в Excel, некоторые столбцы содержат текстовые строки, которыеформулы Excel, относящиеся к именованным диапазонам в целевом файле Excel, куда код экспортирует результаты.Например, одна текстовая строка:

=VLOOKUP(INDEX(EPT,ROW()-ROW(EPT)+1,12),TechnologyData_EPT,3,FALSE)

, где EPT и TechnologyData_EPT - именованные диапазоны в книге Excel.

После вставки в столбцах будет отображаться текстовая строка, а не результаты формулы.Нажатие F9, Ctrl + Alt + F9, Ctrl + Alt + Shft + F9 не обновит формулы.Формат ячейки стандартный, а не текстовый.

Я попытался написать модуль поиска и замены в коде VBA, найдя «=» и заменив его на «=», но это также не пересчитает формулы,Это работает, хотя, если я делаю это вручную вне VBA.

Worksheets("EPT").Range("EPT").Select
fnd = "="
rplc = "="
Range("EPT").Replace what:=fnd, Replacement:=rplc, _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False

Любая подсказка о том, почему это происходит?Я хотел бы, чтобы формулы автоматически обновлялись при запуске кода.

EDITED

Для ясности, в python формулы Excel добавляются с помощью следующего модуля:

def xlLookup(lu_table, lu_clm, lu_key, sep=';'):
    if sep==';':    formula = '=LOPSLAG(INDEKS(EPT;RÆKKE()-RÆKKE(EPT)+1;{});'+lu_table+';{};FALSK)'
    else:           formula = '=VLOOKUP(INDEX(EPT,ROW()-ROW(EPT)+1,{}),'+lu_table+',{},FALSE)'
    return formula.format(lu_key, lu_clm)

Окончательный кадр данных экспортируется в буфер обмена, а затем копируется в книгу Excel с помощью следующего кода VBA:

With Sheets(SheetName)
     .Rows(FirstRow & ":" & .Rows.Count).Delete 'clear
     .Cells.NumberFormat = "General"
     .Paste (.Cells(FirstRow, 1))
End With

После вставки формулы отображаются в виде текстовой строки, и до сих пор я не нашелспособ заставить их вычислять автоматически - единственное решение, которое я нашел, это сделать руководство Найти и заменить (Найти = и заменить =).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...