需要 Google 脚本将值从一个选项卡复制到另一个选项卡

Need Google Script to copy values from one tab to another

我正在为我的企业制作记分卡。员工根据他们的工作时间长短获得不同的带薪休假。我需要一个脚本,该脚本仅将员工的“主”记分卡中的值复制到标题为当前月份的新 sheet 中。因为他们的 PTO 发生变化,我需要一个脚本来将该信息复制到新选项卡,以便原始选项卡不会随着就业时间的延长而继续更改 PTO 分数。

我已经创建了底部脚本,除了它还会复制所有使 PTO 分数随时间变化的公式之外,它可以执行所有操作。非常感谢任何帮助。

function Copymastersheettoscorecard(){
var date = Utilities.formatDate(new Date(), "GMT-22", "MM/dd/yyyy");
var ss = SpreadsheetApp.openById("1hkmRbHD24X1y8yJFdbd-BPaSyctyHGvyQBy9mi4mDc8"); 
var dss = SpreadsheetApp.openById("1ooGOPyXLYJrcN0WFH2d65hOODj_Z4DtZu47E6a04VHs");
var Newsheet = ss.getSheetByName("Master Sheet").copyTo(dss).setName(date); 
}

有几个选项:

function Copymastersheettoscorecard(){
  var date = Utilities.formatDate(new Date(), "GMT-22", "MM/dd/yyyy");
  var ss = SpreadsheetApp.openById("SS_ID_1");
  var dss = SpreadsheetApp.openById("SS_ID_2");
  var Newsheet = ss.getSheetByName("Master Sheet").copyTo(dss).setName(date);
  var destRange = Newsheet.getDataRange();
  destRange.setValues(destRange.getValues());
}
    1. 在新的传播sheet中插入并清空sheet,并直接从原始sheet复制值,也使用getDataRangesetValuesgetValues:
function Copymastersheettoscorecard(){
  var date = Utilities.formatDate(new Date(), "GMT-22", "MM/dd/yyyy");
  var ss = SpreadsheetApp.openById("SS_ID_1");
  var dss = SpreadsheetApp.openById("SS_ID_2");
  var Newsheet = dss.insertSheet(date);
  var sourceValues = ss.getSheetByName("Master Sheet").getDataRange().getValues();
  Newsheet.getRange(1,1,sourceValues.length,sourceValues[0].length).setValues(sourceValues);
}

第二种方法不那么复杂,但它不会复制格式。如果您想保留那个,请不要使用这个。

    1. 使用 Range.copyTo,它允许将选项设置为仅粘贴值 (SpreadsheetApp.CopyPasteType.PASTE_VALUES)。但是,这种方式需要创建和删除一个临时 Sheet(因为它不能用于在不同的 spreadsheet 之间复制范围),并且它也不会保留格式:
function Copymastersheettoscorecard(){
  var date = Utilities.formatDate(new Date(), "GMT-22", "MM/dd/yyyy");
  var ss = SpreadsheetApp.openById("SS_ID_1");
  var dss = SpreadsheetApp.openById("SS_ID_2");
  var sourceRange = ss.getSheetByName("Master Sheet").getDataRange();
  var Tempsheet = ss.insertSheet("TEMPORARY");
  sourceRange.copyTo(Tempsheet.getRange("A1"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  Tempsheet.copyTo(dss).setName(date);
  ss.deleteSheet(Tempsheet);
}