Как с помощью макроса в Google Sheets создать копию листа и перенести в неё только значения?

У меня не получается создать скрипт. <br/> Задача следующая: необходимо скопировать лист "Товарный чек" и вставить его в ту же книгу под новым названием (это название брать из ячеек A9 и B9). При этом данные должны быть скопированы как значения (без формул), но при этом форматирование должно оставаться прежним (включая объединённые ячейки, размер шрифта и т.д.).
  • 5 февраля 2025 г. 9:34
Ответы на вопрос 2
Чтобы создать макрос в Google Sheets, который будет копировать лист "Товарный чек" под новым названием (из ячеек A9 и B9), и при этом переносить только значения, сохраняя форматирование, вы можете использовать следующий скрипт Google Apps Script.

1. Откройте Google Sheets.
2. В меню выберите "Расширения" -> "Apps Script".
3. Удалите любой существующий код из редактора и вставьте следующий:

```javascript
function copySheetWithValues() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = ss.getSheetByName("Товарный чек");
  
  // Получаем названия из ячеек A9 и B9
  var newSheetName = sourceSheet.getRange("A9").getValue() + " " + sourceSheet.getRange("B9").getValue();

  // Проверяем, существует ли уже лист с таким именем
  if (ss.getSheetByName(newSheetName)) {
    Logger.log("Лист с таким названием уже существует.");
    return;
  }

  // Копируем лист
  var newSheet = sourceSheet.copyTo(ss);
  newSheet.setName(newSheetName);

  // Копируем значения и форматирование
  var range = newSheet.getDataRange();
  range.copyTo(newSheet.getDataRange(), {contentsOnly: true}); // Копируем только значения
}
```

4. Сохраните скрипт, нажав на иконку дискеты или сочетание `Ctrl + S`.
5. Закройте редактор Apps Script.
6. Чтобы запустить скрипт, вернитесь в Google Sheets, затем выберите "Расширения" -> "Макросы" -> "Запустить макрос...", и выберите ваш макрос `copySheetWithValues`.

### Объяснение кода:
- Мы получаем ссылку на книгу и исходный лист "Товарный чек".
- Получаем название нового листа из ячеек A9 и B9.
- Проверяем, существует ли лист с таким названием, чтобы избежать конфликта имен.
- Копируем исходный лист.
- Используем метод `copyTo` с параметром `{contentsOnly: true}` для копирования только значений.

Теперь при запуске этого макроса будет создаваться новый лист с данными из "Товарного чека", при этом только значения будут перенесены, а форматирование сохранится.
Все очень просто, даже Жпт справится: 

Похожие вопросы