如何修复Google表格中“ setformula”之后的公式解析错误?

时间:2019-03-26 10:54:52

标签: google-apps-script google-sheets google-sheets-formula

在Google脚本中使用setformula后,公式解析错误出现问题。

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

马特

matvyr.setFormula("=SUMIFS('Náklady'!G:G;'Náklady'!A:A; CONCATENATE(AG1; INDIRECT(\"RC[-31]\";FALSE));'Náklady'!H:H;AG7)");

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

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

4 个答案:

答案 0 :(得分:3)

不是直接与问题有关的 ,但是,如果一个问题是使用setFormulasR1C1批量设置公式,而一个或多个公式丢失(例如未设置),则只需将getFormulasR1C1映射到setFormulasR1C1将导致公式解析#ERROR

要解决此问题,必须拦截单元格值。由于没有公式的单元格由空字符串表示,因此可以利用||运算符。下面是一个示例实用程序,用于复制保留单元格引用的公式:

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;
    }

};

答案 1 :(得分:0)

如果将其余的A1表示法转换为R1C1表示法,然后使用setFormulaR1C1而不是setFormula会发生什么? – 22小时前tehhowch

此评论解决了问题。如果我将其完全重写为R1C1,它将正常工作。

答案 2 :(得分:0)

使用英语作为函数名称。

问题正文中的第一个屏幕截图显示了INDIRECT和FALSE的非英语功能名称,而第二个功能则显示了英语。

显然,问题在于函数名称的翻译是由Google Sheets UI完成的,而不是由服务器端的Google Sheets引擎完成的。

答案 3 :(得分:0)

我有完全一样的问题。这是我的功能:

"+0530"

它产生以下内容: parse error

我只需要站在编辑栏中并按“ Enter”键即可使其起作用:works when I hit enter

我是R1C1表示法的新手。当我尝试重写该公式时,所有even 'manually'都将停止工作。