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

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

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

1 ответ

Объяснение:

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

  • Во вновь созданной таблице будет один лист с именем 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:

      // 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);
}
Другие вопросы по тегам