Google apps script 如何修复“后的公式解析错误”;setformula";在谷歌表单中?
在google脚本中使用setformula后,我遇到了公式解析错误问题 我使用了Google apps script 如何修复“后的公式解析错误”;setformula";在谷歌表单中?,google-apps-script,google-sheets,google-sheets-formula,Google Apps Script,Google Sheets,Google Sheets Formula,在google脚本中使用setformula后,我遇到了公式解析错误问题 我使用了\来转义代码中的双引号“,但是在运行脚本后,解析错误显示在公式上。 公式本身应该是正确的,因为如果我手动复制和粘贴,一切正常。我可以尝试在添加一个空格后在“函数行”中编辑公式,公式解析错误将消失 马特 编辑公式前的错误屏幕截图 只需在公式代码中添加一个空格 如果您将剩余的A1符号转换为R1C1符号,然后使用setFormulaR1C1而不是setFormula,会发生什么情况?22小时前,tehhowch 此注释
\
来转义代码中的双引号“
,但是在运行脚本后,解析错误显示在公式上。
公式本身应该是正确的,因为如果我手动复制和粘贴,一切正常。我可以尝试在添加一个空格后在“函数行”
中编辑公式,公式解析错误将消失
马特
编辑公式前的错误屏幕截图
只需在公式代码中添加一个空格
如果您将剩余的A1符号转换为R1C1符号,然后使用setFormulaR1C1而不是setFormula,会发生什么情况?22小时前,tehhowch 此注释解决了问题。如果我将其完全重写为R1C1,它将正常工作。与问题没有直接关系,但是如果一个正在批量设置公式,并且缺少一个或多个公式(例如,未设置),只需将
getFormulasR1C1
映射到setFormulasR1C1
即可导致公式解析#错误
要解决此问题,必须截取单元格值。由于没有公式的单元格由空字符串表示,因此可以利用|
运算符。下面是用于复制保留单元格引用的公式的示例实用程序:
const copyFormulas = ({ source, target, indices = [], onError = console.warn } = {}) => {
try {
const valsToCopy = source.getValues();
const toCopy = source.getFormulasR1C1();
const toLeave = target.getFormulasR1C1();
const copied = toCopy.map((row, ri) => row.map((cell, ci) => {
if (!indices.includes(ci)) {
return toLeave[ri][ci] || valsToCopy[ri][ci];
}
return cell || valsToCopy[ri][ci];
}));
target.setValues(copied);
SpreadsheetApp.flush();
return true;
}
catch (error) {
onError(error);
return false;
}
};
函数名使用英语 问题正文中的第一个屏幕截图显示了间接和假的非英语功能名称,但第二个功能用英语显示
显然,问题在于函数名转换是由Google Sheets UI完成的,而不是由服务器端的Google Sheets引擎完成的。我有完全相同的问题。以下是我的函数:
函数CreateLookupID(){
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
var sheetforconcat=电子表格.getSheetByName(“报告”);
在(1)之前插入混凝土柱的板材;
var lastrow=sheetforconcat.getLastRow();
var idrange=sheetforconcat.getRange(2,1,最后一行);
idrange.setFormulaR1C1('=CONCAT(替换为(B2,“,”),左(替换为(G2,“,”),3));
};
如果将剩余的A1符号转换为R1C1符号,然后使用setFormulaR1C1
而不是setFormula
?SpreadsheetApp.flush()
在setFormula之后,我的猜测是电子表格的国际设置。添加1个空格似乎可以将您的公式从捷克语/英语混合转换为正确的英语。您好,绝对不是。公式没有混合。它正确地写在目标工作表名称中的náklady一词。这并不能回答问题。一旦你有足够的钱,你将能够;相反。
const copyFormulas = ({ source, target, indices = [], onError = console.warn } = {}) => {
try {
const valsToCopy = source.getValues();
const toCopy = source.getFormulasR1C1();
const toLeave = target.getFormulasR1C1();
const copied = toCopy.map((row, ri) => row.map((cell, ci) => {
if (!indices.includes(ci)) {
return toLeave[ri][ci] || valsToCopy[ri][ci];
}
return cell || valsToCopy[ri][ci];
}));
target.setValues(copied);
SpreadsheetApp.flush();
return true;
}
catch (error) {
onError(error);
return false;
}
};