Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

Скрипт для копирования листа из другой гугл таблицы

Автор Максим Пожарский, 27.05.2024, 16:12:45

« назад - далее »

Максим Пожарский

Всем добрый день! Помогите, пожалуйста, доработать скрипт :-\
Мне нужно, чтобы по запуску скрипта копировался лист (как шаблон) из другой таблицы. И желательно, чтобы скопированный лист ставился не в конце, а в начале таблицы.
Я пока только учусь писать скрипты, написал следующий скрипт, который копирует лист из текущей таблицы, но ставит его в самый конец, что не очень удобно, так как много вкладок присутствует.
function onOpen() { 
SpreadsheetApp.getUi()                  //доступ к интерфейсу Google Sheets 
.createMenu('Новая кнопка')            //меню 
.addItem('Шаблон графика', 'myFunction_Button1')  //кнопка "Код 1"
.addToUi();
};
function myFunction_Button1() {
var ss = SpreadsheetApp.getActive();
var sheetOld = ss.getSheetByName('Сентябрь_2024');
var sheetNew = sheetOld.copyTo(ss);
sheetNew.setName('Месяц_2024');
}


Копирование привязал к кнопке.
Очень нужно, чтобы копирование листа было из другой таблицы :-[

Заранее благодарю!

casag

Добрый день!
Почитайте здесь https://forbiz-online.org/rabota-s-listom-google-sheets-s-pomoshhyu-skripta/
В вашем случае:
Обратиться к листу из другой таблицы
var sh = SpreadsheetApp.openById('ID таблицы, с которой нужно скопировать лист').getSheetByName('Имя копируемого листа');

вставить лист в начале и скопировать в него другой лист
function myFunction_Button1() {
var ss = SpreadsheetApp.getActive();
var sheetOld = ss.getSheetByName('Сентябрь_2024');
ss.insertSheet(0,{template: sheetOld}).setName('Месяц_2024');

Максим Пожарский

Здравствуйте Casag! Подскажите, пожалуйста, что не так делаю в скрипте? Он почему то копирует пустой лист :-\
function myFunction_Button1() {
var sh = SpreadsheetApp.openById('1HLF22eVwFqFXQPrKoTDAL4MXrAXZvdZE44WjItxAIiQ').getSheetByName('Шаблон_2024');
var ss = SpreadsheetApp.getActive();
var sheetOld = ss.getSheetByName('Шаблон_2024');
ss.insertSheet(0,{template: sheetOld}).setName('Месяц_2024');
}


Я же правильно понимаю функция ss.getSheetByName('Шаблон_2024'); в ней указывается имя листа, который копируем из другой таблицы, ранее к которой обращались?

casag

#3
Так скрипт копирует лист из этой же книги:
function copySheet() {
 let ss = SpreadsheetApp.getActiveSpreadsheet();
 let sheetOld = ss.getSheetByName('Шаблон_2024');
 ss.insertSheet(0, { template: sheetOld }).setName('Месяц_2024');
}

Так скрипт копирует лист из другой книги:
function copySheet1() {
 let sheetOld = SpreadsheetApp.openById('1HLF22eVwFqFXQPrKoTDAL4MXrAXZvdZE44WjItxAIiQ').getSheetByName('Шаблон_2024');
 let ss = SpreadsheetApp.getActiveSpreadsheet();
 sheetOld.copyTo(ss).setName('Месяц_2024');
}

Так скрипт копирует из другой книги и переносит лист на первую позицию:
function copySheet2() {
 let sheetOld = SpreadsheetApp.openById('1HLF22eVwFqFXQPrKoTDAL4MXrAXZvdZE44WjItxAIiQ').getSheetByName('Шаблон_2024');
 let ss = SpreadsheetApp.getActiveSpreadsheet();
 let temp = sheetOld.copyTo(ss);
 ss.insertSheet(0, { template: temp }).setName('Месяц_2024');
 ss.deleteSheet(temp);
}


Максим Пожарский

Спасибо вам добрый человек :) Я вчера читал статью, которую вы мне отправили, но не до конца разобрался ??? Пытался сам, но напутал много всего и в итоге ничего не получилось(
Можете, пожалуйста, посоветовать, что можно почитать, чтобы я мог научиться элементарные скрипты хотя бы писать, может есть какой мануал?
На просторах интернета много всего, но фиг знает, что из этого полезно, а что нет

Яндекс.Метрика Рейтинг@Mail.ru