【问题标题】:Auto-expanding formula and then copy paste values自动扩展公式,然后复制粘贴值
【发布时间】:2020-01-13 18:49:55
【问题描述】:

我有一个函数可以将自动扩展公式添加到某些标题行单元格

在下一行代码中,我得到Display Values,然后将它们发布回工作表

我担心我会得到自动扩展公式before他们已经完成expanding范围内的值

这个r.getDisplayValues(); 会得到值before 自动扩展完成吗?从而得到应该有数据的空白数据的值

我已经测试了各种场景,但这不是确定的

另外,我在搜索中找不到任何东西

谢谢

function setFormulasAE_n() {
  var ss    =SpreadsheetApp.getActive();
  var sheet =ss.getSheetByName('Elements');
  var LC    = sheet.getLastColumn();
  var LR    = sheet.getLastRow();

  //Auto-expanding Formulas to be added
  //Two dim array with 1 row
  var formulas = [[
"=ArrayFormula({\"ig_TagsHistorical\";iferror(vlookup(INDIRECT(\"Elements!A2:A\"&counta(Elements!$AJ$1:$AJ)), \'HelperElements_(ignore)\'!$A$2:$G, {5}, 0))})",
  "=ArrayFormula({\"Additional Networks\";iferror(vlookup(INDIRECT(\"Elements!A2:A\"&counta(Elements!$AJ$1:$AJ)), \'Helper_(ignore)\'!$A$2:$D, {4}, 0))})",
 ]];

  //Add auto-expanding formulas to Cell(s)
  var cell = sheet.getRange(1,LC+1,1,formulas[0].length);
  cell.setFormulas(formulas);

  //Get range and post back Display Values
  var r = sheet.getRange(1,LC+1,LR,formulas[0].length);
  var v = r.getDisplayValues();
  r.setValues(v)

}

【问题讨论】:

  • 有什么问题?
  • 这个r.getDisplayValues(); 会得到值before 自动扩展完成吗?从而获得应该有数据的空白数据的值
  • 也许你应该在 setFormulas() 之后尝试 SpreadsheetApp.flush()。
  • 谢谢,我会补充的

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


【解决方案1】:

您在脚本中使用的setFormulas() 函数是同步的,这实质上意味着在函数完成执行之前不会执行指令之后的代码.

因此,r.getDisplayValues() 将始终获得自动扩展之后的值。

您可以做的是在cell.setFormulas(formulas) 代码行之后使用flush() 函数来确保获得的值是预期值。 flush() 所做的基本上是应用所有未决的电子表格更改 - 更具体地说,是您需要设置的公式。

此外,您可以查看这些链接,因为它们可能对您有所帮助:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多