尝试使用GAS将长公式转换为绝对行引用,下面是一个简短的示例。看看这个:=IFERROR((AW220-AW221)/(AW216*4)/1000+AW217)下一篇:=IFERROR((AW$220-AW$221)/(AW$216*4)/1000+AW$217)我需要所有的单元格引用都按行锚定。我可以把它剥离出来formula.replace(/\$/g,""),不知道如何把它放回去。我只能使用[A-Z]+[0-9]+匹配,现在该怎么办?
=IFERROR((AW220-AW221)/(AW216*4)/1000+AW217)
=IFERROR((AW$220-AW$221)/(AW$216*4)/1000+AW$217)
formula.replace(/\$/g,"")
[A-Z]+[0-9]+
5cnsuln71#
我相信你的目标如下。
我认为在这种情况下,当公式作为R1C1检索时,脚本可能会很简单。当这反映在示例脚本中时,下面的示例脚本如何?
在使用此脚本之前,请将预期范围设置为A1Notation。
function myFunction() { const rangeA1Notation = "'Sheet1'!A1:C10"; // Please set your range as A1Notation. const ss = SpreadsheetApp.getActiveSpreadsheet(); const range = ss.getRange(rangeA1Notation); const values = range.getValues(); const newValues = range.getFormulasR1C1().map((r, i) => r.map((c, j) => c ? c.replace(/R\[(.*?)\]C\[(.*?)\]/g, (_, p2, p3) => `R${Number(p2) + i + 1}C[${Number(p3)}]`) : values[i][j])); range.setValues(newValues); }
AW220
AW$220
1条答案
按热度按时间5cnsuln71#
我相信你的目标如下。
我认为在这种情况下,当公式作为R1C1检索时,脚本可能会很简单。当这反映在示例脚本中时,下面的示例脚本如何?
示例脚本:
在使用此脚本之前,请将预期范围设置为A1Notation。
AW220
到AW$220
。=IFERROR((AW220-AW221)/(AW216*4)/1000+AW217)
公式时,此脚本将其转换为=IFERROR((AW$220-AW$221)/(AW$216*4)/1000+AW$217)
。参考资料: