Нужен скрипт Google для копирования значений из одной вкладки в другую

Я работаю над оценочными карточками для своего бизнеса. Сотрудникам предоставляется разный оплачиваемый отпуск в зависимости от продолжительности их работы. Мне нужен сценарий, который копирует только значения из главной карты показателей сотрудника на новый лист с названием текущего месяца. Поскольку их 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); 
}

person Christopher Lu    schedule 10.11.2020    source источник


Ответы (1)


Есть несколько вариантов:

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. Insert and empty sheet in the new spreadsheet, and copy the values from the original sheet directly, also using getDataRange, setValues 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 = dss.insertSheet(date);
  var sourceValues = ss.getSheetByName("Master Sheet").getDataRange().getValues();
  Newsheet.getRange(1,1,sourceValues.length,sourceValues[0].length).setValues(sourceValues);
}

Этот второй метод менее сложен, но он не будет копировать форматирование. Не используйте это, вы хотите сохранить это.

    1. Use Range.copyTo, which allows to set the option to paste only values (SpreadsheetApp.CopyPasteType.PASTE_VALUES). This way, though, would require creating and deleting a temporary Sheet (since it cannot be used to copy ranges between different spreadsheets), and it wouldn't keep the formatting either:
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);
}
person Iamblichus    schedule 10.11.2020