Как использовать название листа в формуле с помощью скрипта?

Как можно улучшить скрипт, чтобы при создании нового листа оператор мог внести название нового листа в ячейку на листе "Шаблон", после чего запустить скрипт, который бы создал копию листа "Шаблон", переименовал его в соответствии с введенным оператором названием и вставил это название в формулу на листе "Отчет"? Существующую функцию в скрипте "new()" пора модифицировать для достижения описанного результата.
  • 23 мая 2024 г. 15:11
Ответы на вопрос 2
Для использования названия листа в формуле с помощью скрипта в Google Apps Script можно использовать метод getSheetByName(name), который позволяет получить объект листа по его имени. Например, если у вас есть лист с именем "Данные" и вы хотите использовать его название в формуле на листе "Отчет", то можно сделать это так:

```javascript
function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheetByName("Данные");
  var reportSheet = ss.getSheetByName("Отчет");
  
  var dataSheetName = dataSheet.getName();
  
  // Пример использования названия листа в формуле на листе "Отчет"
  reportSheet.getRange('A1').setFormula('=INDIRECT("' + dataSheetName + '" & "!A1")');
}
```

Чтобы улучшить скрипт для создания нового листа и автоматического переименования его в соответствии с введенным оператором названием, а также вставки этого названия в формулу на листе "Отчет", можно модифицировать функцию `new()` следующим образом:

```javascript
function new(sheetName) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  
  var templateSheet = ss.getSheetByName("Шаблон");
  var newSheet = templateSheet.copyTo(ss);
  
  newSheet.setName(sheetName);
  
  var reportSheet = ss.getSheetByName("Отчет");
  var sheetNameCell = reportSheet.getRange('A1');
  sheetNameCell.setValue(sheetName);
  
  reportSheet.getRange('A2').setFormula('=INDIRECT("' + sheetName + '" & "!A1")');
}
```

После введения названия нового листа в ячейку A1 на листе "Отчет", нужно запустить функцию `new()` и передать в нее введенное название листа. Это приведет к созданию копии листа "Шаблон", переименованию его введенным названием и вставке этого названия в формулу на листе "Отчет".
Попробуйте так: 
spreadsheet.getCurrentCell().setFormula('=IFERROR(VLOOKUP($A3;'&zn&'!$A$1:$B$46;2;0);"0")');
Похожие вопросы