Google apps script 如何修复“后的公式解析错误”;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 此注释

在google脚本中使用setformula后,我遇到了公式解析错误问题

我使用了
\
来转义代码中的双引号
,但是在运行脚本后,解析错误显示在公式上。 公式本身应该是正确的,因为如果我手动复制和粘贴,一切正常。我可以尝试在添加一个空格后在
“函数行”
中编辑公式,公式解析错误将消失

马特

编辑公式前的错误屏幕截图

只需在公式代码中添加一个空格


如果您将剩余的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;
    }

};