【问题标题】:Preserve relative references in spreadsheet when using Range.getFormula()使用 Range.getFormula() 时在电子表格中保留相对引用
【发布时间】:2015-04-15 09:36:51
【问题描述】:

所以,我对 google script/javascript 非常陌生,我想知道如何从一个单元格中获取公式并将其应用到第二个单元格中。原始公式引用第三个单元格,所以我希望粘贴的单元格有一个新公式,其中参考单元格相对于新定位。 (就像我在电子表格 GUI 上使用复制和粘贴一样。)

function myFunction() {
  //Set Spreadsheet "Form Responses 1"
     var ss1 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];

  //Set Spreadsheet "Gant"
    var ss3 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];

  //Get Last row with value
    var InputRange = ss1.getRange("A1:A").getValues();
    var InputLast = InputRange.filter(String).length;

  //Get Formula which is to be applied to last form entry
    var sourcerange = ss1.getRange(1, 12, 1, 3);
    var sourceformula = sourcerange.getFormula();

    var outputrange = ss1.getRange(1,12,1,3).offset(InputLast - 1, 0);
    outputrange.setFormula(sourceformula);
}

如果原来的公式是

 =vlookup(A1, B;C,2,false)

新单元格应该类似于

 =vlookup(A4, B;C,2,false)    

【问题讨论】:

  • 我发现代码 copyto() 适用于此。
  • 你应该发布你自己的答案,这样它可以帮助其他人有一天可能有同样的问题。

标签: google-apps-script google-sheets


【解决方案1】:

我发现 .copyTo() 可以解决这个问题

如果有人想知道,这里是链接:https://developers.google.com/apps-script/reference/spreadsheet/range#copyTo(Range)

【讨论】:

  • 是的!我是在浏览参考网站时发现的!
【解决方案2】:

.copyTo() 适用于 OP 的情况。但是,如果您正在循环一个您可能想要的范围:

var sourceFormulas = sourceRange.getFormulasR1C1();

...

outputRange.setFormulasR1C1(sourceFormulas);

这样你只需要进行两次API调用;循环前一次,循环后一次。它比每次循环迭代调用 API .copyTo() 快得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    相关资源
    最近更新 更多