копировать из таблицы в другую таблицу с динамическим заголовком

В настоящее время я работаю над проектом, в котором мне нужно скопировать данные с одного конкретного листа в электронной таблице в другую электронную таблицу с динамическим заголовком (текст с датой). перемещение данных с идентификатором или по имени в порядке, но со свежесозданной таблицей кажется неприятным. все функции будут в одном скрипте приложения: создание копии

function titleAsDate() {

  var currentDate = Utilities.formatDate(new Date(), "GMT+8", "dd-MM-yyyy HH:mm:ss")
  SpreadsheetApp.create("Report of the " + currentDate)
}

function copyWithValues() {
  let spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  let sourceSheet = spreadSheet.getSheetByName('Sources');
  
  let sourceRange = sourceSheet.getDataRange();
  let sourceValues = sourceRange.getValues();
  
  let rowCount = sourceValues.length;
  let columnCount = sourceValues[0].length;
  
  let targetSheet = spreadSheet.getSheetById('Target');
  let targetRange = targetSheet.getRange(1, 1, rowCount, columnCount);
  
  targetRange.setValues(sourceValues);
}

person Jean Yves Le Magnifik    schedule 15.02.2021    source источник


Ответы (1)


Объяснение:

  • SpreadsheetApp.create (name) возвращает spreadsheet, чтобы вы могли напрямую использовать выходные данные этой функции без необходимости. дополнительного кода.

  • Во вновь созданной электронной таблице будет один лист с именем Sheet1, как при создании нового файла электронной таблицы вручную. Следовательно, вы можете использовать функцию sheet.setName (name), чтобы изменить имя листа на Target. Также эта функция возвращает объект лист (targetSheet), который затем может быть используется для установки значений.

Решение:

Это весь код в одной функции:

function copyWithValues() {
  const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = spreadSheet.getSheetByName('Sources');
  const sourceRange = sourceSheet.getDataRange();
  const sourceValues = sourceRange.getValues();
  
  const currentDate = Utilities.formatDate(new Date(), "GMT+8", "dd-MM-yyyy HH:mm:ss"); // new code
  const targetSpreadsheet = SpreadsheetApp.create("Report of the " + currentDate); // new code
  
  let rowCount = sourceValues.length;
  let columnCount = sourceValues[0].length;
  
  let targetSheet = targetSpreadsheet.getSheetByName('Sheet1').setName("Target"); // new code
  let targetRange = targetSheet.getRange(1, 1, rowCount, columnCount);
  
  targetRange.setValues(sourceValues);
}

Если вы хотите использовать titleAsDate в качестве вспомогательной функции, которая будет вызываться copyWithValues, вы можете использовать этот код и выполнять только copyWithValues:

// helper function, used by copyWithValues
function titleAsDate() {
  const currentDate = Utilities.formatDate(new Date(), "GMT+8", "dd-MM-yyyy HH:mm:ss");
  return SpreadsheetApp.create("Report of the " + currentDate); // new code
}

// main function, you should execute this function
function copyWithValues() {
  const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = spreadSheet.getSheetByName('Sources');
  const sourceRange = sourceSheet.getDataRange();
  const sourceValues = sourceRange.getValues();
  
  const targetSpreadsheet = titleAsDate(); // new code
  
  let rowCount = sourceValues.length;
  let columnCount = sourceValues[0].length;
  
  let targetSheet = targetSpreadsheet.getSheetByName('Sheet1').setName("Target"); // new code
  let targetRange = targetSheet.getRange(1, 1, rowCount, columnCount);
  
  targetRange.setValues(sourceValues);
}
person soMario    schedule 15.02.2021