【问题标题】:How to fix formula parse error after "setformula" in google sheets?如何在谷歌表格中的“setformula”之后修复公式解析错误?
【发布时间】:2019-03-26 10:54:52
【问题描述】:

在谷歌脚本中使用 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)");

编辑公式前的错误截图

公式代码只加了一个空格

【问题讨论】:

  • 如果将剩余的 A1 表示法转换为 R1C1 表示法然后使用 setFormulaR1C1 而不是 setFormula 会发生什么?
  • SpreadsheetApp.flush() setFormula 后
  • 我的猜测是电子表格的国际设置。添加 1 个空格似乎会将您的公式从混合的捷克语/英语转换为正确的英语。
  • 嗨,绝对不是。配方不混。在目标工作表名称中正确写入单词 náklady。

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


【解决方案1】:

直接与问题无关,但如果一个人正在使用setFormulasR1C1 批量设置公式,并且缺少一个或多个公式(例如未设置),只需映射@ 987654323@到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;
    }

};

【讨论】:

    【解决方案2】:

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

    这条评论解决了这个问题。如果我将它完全重写为 R1C1,它可以正常工作。

    【讨论】:

      【解决方案3】:

      函数名称使用英文。

      问题正文中的第一个屏幕截图显示 INDIRECT 和 FALSE 的非英语函数名称,但第二个函数以英语显示它们。

      显然问题在于函数名称转换是由 Google 表格 UI 完成的,而不是由服务器端的 Google 表格引擎完成的。

      【讨论】:

        【解决方案4】:

        @Coverdale,这对我有用,无需点击进入

        function myFunctionNew(){
          var cel = SpreadsheetApp.getCurrentCell()
          cel.setFormula(`=CONCAT(SUBSTITUTE(B2," ",""),LEFT(SUBSTITUTE(G2," ",""),3))`)
        }
        

        @Boomer,这对我有用,无需按 Enter 键

        function myFunctionNew(){
          var cel = SpreadsheetApp.getCurrentCell()
          cel.setFormula(`=SUMIFS('Náklady'!G:G,'Náklady'!A:A, CONCATENATE(AG1, INDIRECT("RC[-31]",FALSE)),'Náklady'!H:H,AG7)`);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-09
          • 1970-01-01
          • 2020-09-09
          • 2021-10-28
          • 1970-01-01
          • 2021-05-03
          相关资源
          最近更新 更多