目標是遍歷字符表的行并將每個字符替換為它的替代品。
此示例中的字符表是={"&","&";"<","<";">",">";"'","'";"""","""}, 或:
*(旁注:在這種情況下必須在串列中的最后一個,否則它將替換先前替換中的其他匹配項,因為我們將從最后到第一個。)

"&","&"
公式:
=LAMBDA(XML,Pos,
LET(
Cls,{"&","&";"<","<";">",">";"'","'";"""","""},
Row,IF(ISOMITTED(Pos),ROWS(Cls),Pos),
Crf,INDEX(Cls,Row,1),
Crr,INDEX(Cls,Row,2),
Sub,SUBSTITUTE(XML,Crf,Crr),
IF(Row=0,XML,ENCODEXML(Sub,Row-1))
))
預期的結果=ENCODEXML("sl < dk & jf")是sl < dk & jf
我得到了#VALUE!錯誤。
uj5u.com熱心網友回復:
- 您需要在遞回上有一個出口:
=LAMBDA(XML,Pos,
LET(
Cls,{"&","&";"<","<";">",">";"'","'";"""","""},
Row,IF(ISOMITTED(Pos),ROWS(Cls),Pos),
Crf,INDEX(Cls,Row,1),
Crr,INDEX(Cls,Row,2),
Sub,SUBSTITUTE(XML,Crf,Crr),
IF(Row>1,ENCODEXML(Sub,Row-1),Sub)
))
- 您需要
,在呼叫中添加:
=ENCODEXML("sl < dk & jf",)

或者正如@Filcuk 發現的(我剛剛了解到)如果它是可選的,則需要使用宣告[]
IE:
=LAMBDA(XML,[Pos],
LET(
Cls,{"&","&";"<","<";">",">";"'","'";"""","""},
Row,IF(ISOMITTED(Pos),ROWS(Cls),Pos),
Crf,INDEX(Cls,Row,1),
Crr,INDEX(Cls,Row,2),
Sub,SUBSTITUTE(XML,Crf,Crr),
IF(Row>1,ENCODEXML(Sub,Row-1),Sub)
))
然后,不需要:
=ENCODEXML("sl < dk & jf")

uj5u.com熱心網友回復:
只是為了補充斯科特上面的答案;通過名稱管理器使用遞回 lambda 似乎已經過時(如果沒有明確需要命名函式供以后使用)。由于REDUCE()它本身是一個遞回函式,現在可以嘗試:
=LET(X,{"&","&";"<","<";">",">";"'","'";"""","""},REDUCE("sl < dk & jf",INDEX(X,0,1),LAMBDA(a,b,SUBSTITUTE(a,b,VLOOKUP(b,X,2,0)))))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/465688.html
