将Google表格值复制到另一个Google Spreadsheet并使用按钮创建新表格

时间:2019-11-13 10:19:41

标签: google-apps-script google-sheets

希望您能提供帮助,我现在主要使用Google表格来完成我的所有工作,并尝试使其更加自动化。

因此,我目前有一个模板表,该表表已被复制多次以用于不同的项目。我想编写一个脚本,当我在模板的任何副本上单击Sheet1(“主页”)上的按钮时,它将所有来自其他工作表的Sheet14(“ Workshop Prep”)的值复制到另一个现有电子表格中并创建一张新纸。

我尝试了各种不同的脚本,并使用了“ copyto”,该脚本可以工作,但不能仅复制公式的值。我已经尝试过CopyDatatoNewFile,但这必须覆盖其他电子表格上的现有工作表。我不能在脚本中使用getActiveSheet,因为我希望按钮位于其他工作表上。

任何帮助将不胜感激。抱歉,这是我第一次发布。

谢谢

编辑1-我尝试过的一些脚本:

  var source = SpreadsheetApp.getActiveSheet();
  var sheet = source.getSheets()[14];
  var sValues = source.getDataRange().getValues();
  var destination = SpreadsheetApp.openById('1-oro3Vf_YXH6QvQ_oQlTL723TTdACo3YxMI7XVnYsqI');
  source.copyTo(destination)
  var destinationSheet = destination.getSheetByName('Copy of '+sourceName)
  destinationSheet.getRange(1,1,sValues.length,sValues[0].length).setValues(sValues);

编辑2-错误-TypeError:在对象Sheet中找不到函数getSheet。 (第3行,文件“ CopyTo”)

1 个答案:

答案 0 :(得分:0)

要复制值而不是公式,则需要使用getDisplayValues()函数[1]而不是getValues()。这是我想出的代码:

function myFunction() {
  var source = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = source.getSheetByName("Workshop Prep");

  var destination = SpreadsheetApp.openById('[SPRADSHEET-ID]');
  var destinationSheet = sourceSheet.copyTo(destination);

  var sValues = sourceSheet.getDataRange().getDisplayValues();
  destinationSheet.getRange(1,1,sValues.length,sValues[0].length).setValues(sValues);
}

[1] https://developers.google.com/apps-script/reference/spreadsheet/range#getDisplayValues()