我有一个从Excel工作簿运行的Python代码,该代码通过从剪贴板粘贴将表格导出到工作簿中。
在导出到Excel的Python数据框中,某些列包含文本字符串,这些字符串是Excel公式,引用目标Excel文件中的名称范围,代码将在该范围内导出结果。例如,一个文本字符串是:
=VLOOKUP(INDEX(EPT,ROW()-ROW(EPT)+1,12),TechnologyData_EPT,3,FALSE)
其中EPT和TechnologyData_EPT在Excel工作簿中被命名为范围。
粘贴后,这些列将显示文本字符串,而不是公式结果。按F9,Ctrl + Alt + F9,Ctrl + Alt + Shift + 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
关于为什么会这样的任何线索?我想让代码在运行代码时自动更新。
为了更加清楚,在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)
将最终数据帧导出到剪贴板,然后通过以下VBA代码复制到Excel工作簿中:
With Sheets(SheetName)
.Rows(FirstRow & ":" & .Rows.Count).Delete 'clear
.Cells.NumberFormat = "General"
.Paste (.Cells(FirstRow, 1))
End With
粘贴后,公式将显示为文本字符串,到目前为止,我还没有找到一种使它们自动计算的方法-我发现的唯一解决方案是执行手动查找和替换(查找=和替换=)。