首页 > 解决方案 > 将 Google 工作表值复制到另一个 Google 电子表格并使用按钮创建新工作表

问题描述

我希望你能提供帮助,我现在主要使用谷歌表格来完成我的所有工作,并试图让它变得有点自主。

所以我目前有一个模板表,可以多次复制以用于不同的项目。我想编写一个脚本,当我在模板的任何副本上单击 Sheet1('Home')上的按钮时,它会将 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 - 错误 - 类型错误:在对象表中找不到函数 getSheet。(第 3 行,文件“CopyTo”)

标签: google-apps-scriptgoogle-sheets

解决方案


要复制值而不是公式,您需要使用 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()


推荐阅读