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