【问题标题】:getFormula() and setFormula() to multiple rangesgetFormula() 和 setFormula() 到多个范围
【发布时间】:2021-01-21 21:20:39
【问题描述】:

我正在尝试使用 Google Apps 脚本在 Google 表格中将所有公式从一张(一月)复制到多张(二月、三月、四月等)。 下面的代码正在为单元格 A1 执行我想要的操作。 但是,我想将一月工作表中的所有公式(或者说 A1:Z10)复制到目标工作表中的相应单元格中。

function copyFormula(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("February");
  var fromRange = sheet.getRange("January!A1");
  var toRange2 = sheet.getRange("February!A1");
  var toRange3 = sheet.getRange("March!A1");
  var toRange4 = sheet.getRange("April!A1");
  var toRange5 = sheet.getRange("May!A1");
  toRange2.setFormula(fromRange.getFormula());
  toRange3.setFormula(fromRange.getFormula());
  toRange4.setFormula(fromRange.getFormula());
  toRange5.setFormula(fromRange.getFormula());
}

除此之外,我相信还有更好的写法:i。 e. var toRange = sheet.getRange("February!A1","March!A1","April!A1","May!A1");toRange.setFormula(fromRange.getFormula()); 之类的东西,而不是为每个月创建单独的变量。

【问题讨论】:

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


    【解决方案1】:

    我相信你的目标如下。

    • 您希望脚本变得更简单。
    • 您希望将January 工作表的单元格“A1:Z10”的公式复制到每个工作表的单元格“A1:Z10”中。

    示例脚本 1:

    很遗憾,在当前阶段,RangeList 不能用于同一个 Google 电子表格中的不同工作表。所以在这个示例脚本中,源公式使用循环放置到每个工作表的单元格中。

    function copyFormula(){
      var sheets = ["February","March","April","May"];
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sourceFormulas = ss.getSheetByName("January").getRange("A1:Z10").getFormulas();
      sheets.forEach(s => ss.getSheetByName(s).getRange("A1:Z10").setFormulas(sourceFormulas));
    }
    
    • 如需增加张数,请修改sheets

    示例脚本 2:

    在此示例脚本中,使用了 Sheets API。因为我认为上面脚本的处理成本有点高,因为setFormula是循环使用的。在此示例脚本中,流程成本将比上述成本低一点。当你使用这个脚本时,please enable Sheets API at Advanced Google servicies.

    function copyFormula(){
      var ranges = ["February!A1:Z10","March!A1:Z10","April!A1:Z10","May!A1:Z10"];
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sourceFormulas = ss.getSheetByName("January").getRange("A1:Z10").getFormulas();
      var values = ranges.map(r =>({values: sourceFormulas, range: r}));
      var resource = {responseValueRenderOption:"FORMULA",valueInputOption:"USER_ENTERED",data:values};
      Sheets.Spreadsheets.Values.batchUpdate(resource, ss.getId());
    }
    
    • 如需增加张数,请修改ranges

    参考资料:

    【讨论】:

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