为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喵时光机 2023-07-20 17:36:31
我正在为我的企业制作记分卡。员工根据工作年限享受不同的带薪休假。我需要一个脚本,仅将员工的“主”记分卡中的值复制到标题为当月的新工作表中。由于他们的 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); }
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

有几种选择:


  1. 将工作表复制到新电子表格,然后使用getDataRange()、setValues(values)和getValues()的组合来删除公式:

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());

}

在新电子表格中插入并清空工作表,然后直接复制原始工作表中的值,也可以使用getDataRange、setValues和getValues:

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);

}

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


使用Range.copyTo,它允许将选项设置为仅粘贴值 ( SpreadsheetApp.CopyPasteType.PASTE_VALUES)。但是,这种方式需要创建和删除临时工作表(因为它不能用于在不同电子表格之间复制范围),并且它也不会保留格式:

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);

}


查看完整回答
反对 回复 2023-07-20
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信