通过AppScript插入不同语言的公式时出错

问题描述 投票:0回答:1

当我手动输入公式时,它运行得很好,但是当通过脚本输入相同的公式时,它显示#Error!或#Name。

我想知道是否有人遇到过这个问题并可以帮助我。

以下是代码:

 targetSheet.getRange('U2:V').clearContent();
 
  rangeU2.setFormula('=ARRAYFORMULA(SEERRO(SE(M2:M = ""; ""; PROCV(M2:M; Players!C2:E; 3; FALSO));""))');
  rangeV2.setFormula('=ARRAYFORMULA(SE(S2:S = ""; ""; SE(U2:U = ""; ""; SE(S2:S=U2:U; G2:G; SE(G2:G="victory"; "defeat"; "victory")))))');
}`

这是描述我使用脚本的位置的图像:

我测试了简单的公式(例如求和)和更复杂的公式,并且两者具有相同的行为。

  • 我已经授予了脚本请求的所有权限。

  • 执行脚本时没有错误

  • 单元格已完美填充公式,但显示错误。

google-sheets google-apps-script google-sheets-formula
1个回答
1
投票

当我测试你的显示脚本时,我也确认了同样的问题。例如,从您的显示公式来看,

SEERRO
SE
在葡萄牙语中可能分别是
IFERROR
IF
?如果我的理解是正确的,我担心这可能是这个问题的原因。那么,为了避免这个问题,下面的模式怎么样?

模式1:

在此模式中,手动更改语言,并使用修改后的公式。

来自:

=ARRAYFORMULA(SEERRO(SE(M2:M = ""; ""; PROCV(M2:M; Players!C2:E; 3; FALSO));""))
=ARRAYFORMULA(SE(S2:S = ""; ""; SE(U2:U = ""; ""; SE(S2:S=U2:U; G2:G; SE(G2:G="victory"; "defeat"; "victory")))))

致:

=ARRAYFORMULA(IFERROR(IF(M2:M = "", "", VLOOKUP(M2:M, Players!C2:E, 3, FALSE)),""))
=ARRAYFORMULA(IF(S2:S = "", "", IF(U2:U = "", "", IF(S2:S=U2:U, G2:G, IF(G2:G="victory", "defeat", "victory")))))

模式2:

语言的翻译由脚本更改。

const sheet = SpreadsheetApp.getActiveSheet();
const range1 = sheet.getRange("U2");
const range2 = sheet.getRange("V2");

const formula1 = `=ARRAYFORMULA(SEERRO(SE(M2:M = ""; ""; PROCV(M2:M; Players!C2:E; 3; FALSO));""))`;
const formula2 = `=ARRAYFORMULA(SE(S2:S = ""; ""; SE(U2:U = ""; ""; SE(S2:S=U2:U; G2:G; SE(G2:G="victory"; "defeat"; "victory")))))`;
range1.setFormula(LanguageApp.translate(formula1, "pt", "en"));
range2.setFormula(LanguageApp.translate(formula2, "pt", "en"));

在此脚本中,

formula1
formula2
被放入活动工作表的单元格“U2”和“V2”中。这是一个简单的示例脚本。因此,请根据您的实际情况修改工作表和单元格范围。

模式3:

使用表格 API。使用 Sheets API 时,使用以下脚本时会自动转换语言,请在高级 Google 服务中启用 Sheets API

const ssId = SpreadsheetApp.getActiveSpreadsheet().getId();
const range1 = "'Sheet1'!U2";
const range2 = "'Sheet1'!V2";
const formula1 = `=ARRAYFORMULA(SEERRO(SE(M2:M = ""; ""; PROCV(M2:M; Players!C2:E; 3; FALSO));""))`;
const formula2 = `=ARRAYFORMULA(SE(S2:S = ""; ""; SE(U2:U = ""; ""; SE(S2:S=U2:U; G2:G; SE(G2:G="victory"; "defeat"; "victory")))))`;
const data = [
  { values: [[formula1]], range: range1 },
  { values: [[formula2]], range: range2 }
];
Sheets.Spreadsheets.Values.batchUpdate({ data, valueInputOption: "USER_ENTERED" }, ssId);

在此脚本中,

formula1
formula2
分别放入单元格
'Sheet1'!U2
'Sheet1'!V2
中。输入公式后,公式将像“模式 1”一样进行转换。这是一个简单的示例脚本。所以,请根据您的实际情况修改范围。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.