Apps Script Gsheets - 在不同的单元格中粘贴相同的值 - 高效的解决方案

时间:2017-10-25 05:15:11

标签: google-apps-script google-sheets

我有一张15页的Gsheet工作簿。有一个改变时间表的中心位置。一旦用户集中更改它 - 它应该应用所有工作表中的更改。

但是,在每张纸上,他也可以在本地更改时间而不会影响其他人。

因此,我刚刚写了一个脚本,将中心值粘贴到所有其他地方。但是,它是一个缓慢的for loop并需要15秒才能完成:

function set_time_frame() {

  var Gsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('General information');

  var inputs =  Gsheet.getRange('f3:f4').getValues();

  var n = 15; // sheets to place

    for ( var i = 1; i <= n; ++i ){

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[i];

  sheet.getRange('c4:c5').setValues(inputs);

    }
}

有没有办法立即粘贴到多个范围?

1 个答案:

答案 0 :(得分:0)

如何使用Sheets API v4?请将此视为几个答案之一。要使用以下脚本,请按以下步骤启用Sheets API for Advanced Google Services和API控制台。

在高级Google服务中启用表格API v4

  • 在脚本编辑器上
    • 资源 - &gt;高级Google服务
    • 启用Google表格API v4

在API控制台启用Sheets API v4

  • 在脚本编辑器上
    • 资源 - &gt;云平台项目
    • 查看API控制台
    • 在“入门”中,单击“启用API”并获取密钥等凭据。
    • 在左侧,单击“库”。
    • 在搜索API&amp;服务,输入“表”。然后点击Google表格API。
    • 单击“启用”按钮。

修改后的脚本:

function set_time_frame() {
  var Gsheet = SpreadsheetApp.getActiveSpreadsheet();
  var inputs =  Gsheet.getSheetByName('General information').getRange('f3:f4').getValues();
  var n = 15; // sheets to place
  var resource = {};
  resource.valueInputOption = "USER_ENTERED";
  var data = [];
  for ( var i = 1; i <= n; ++i ) {
    data.push({
      values: inputs,
      range: Gsheet.getSheets()[i].getSheetName() + "!c4:c5"
    });
  }
  resource.data = data;
  Sheets.Spreadsheets.Values.batchUpdate(resource, Gsheet.getId());
}

修改后的脚本流程:

  1. 检索要导入的值。
  2. 将JSON数据创建为资源。此数据包括您要导入的所有工作表和值。
  3. 使用创建的资源运行表格API。
  4. 参考文献: