需要 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);
}
有几个选项:
-
- 将sheet复制到新的传播sheet,然后使用getDataRange(), setValues(values) and 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());
}
-
- 在新的传播sheet中插入并清空sheet,并直接从原始sheet复制值,也使用
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
)。但是,这种方式需要创建和删除一个临时 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);
}
我正在为我的企业制作记分卡。员工根据他们的工作时间长短获得不同的带薪休假。我需要一个脚本,该脚本仅将员工的“主”记分卡中的值复制到标题为当前月份的新 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);
}
有几个选项:
-
- 将sheet复制到新的传播sheet,然后使用getDataRange(), setValues(values) and 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());
}
-
- 在新的传播sheet中插入并清空sheet,并直接从原始sheet复制值,也使用
getDataRange
、setValues
和getValues
:
- 在新的传播sheet中插入并清空sheet,并直接从原始sheet复制值,也使用
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
)。但是,这种方式需要创建和删除一个临时 Sheet(因为它不能用于在不同的 spreadsheet 之间复制范围),并且它也不会保留格式:
- 使用 Range.copyTo,它允许将选项设置为仅粘贴值 (
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);
}