Новости:

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

Главное меню

Последние сообщения

#11
Так скрипт копирует лист из этой же книги:
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);
}

#12
Здравствуйте 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'); в ней указывается имя листа, который копируем из другой таблицы, ранее к которой обращались?
#13
Добрый день! Откройте доступ к таблице.
#14
Добрый день!
Почитайте здесь 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');
#15
Доброго дня! Прошу помочь в написании макроса...
Суть задачи: ежедневно в течение года ведется сквозная таблица в диапазоне столбцов А:F по выполнению работ подразделением, например:

В1123=27.05.24
В1124=Иванов; Е1124=Адрес1;  F1124=1; G1124=раскоп вывоз; V1124=асфальт.
В1125=Иванов; Е1125=Адрес2; F1125=2; G1125=раскоп отвал; V1125=газон.
В1126=Иванов; Е1126=Адрес3; F1126=1; G1126=изоляция; перекрытие; засыпка; V1126=газон.
В1127=Иванов; Е1127=Адрес4; F1127=2; G1127=прочее/; V1127=перекрытие плит.
В1128=Петров; Е1128=Адрес5; F1128=2; G1128=раскоп отвал; V1128=газон.
В1129=Петров; Е1129=Адрес6; F1129=1; G1129=раскоп вывоз; V1129=асфальт.
В1130=Петров; Е1130=Адрес7; F1130=1; G1130=изоляция; перекрытие; засыпка; V1130=газон.
В1131=Сидоров; Е1131=Адрес8; F1131=1; G1131=сварка; V1131=катушка 3м.
В1132=Сидоров; Е1132=Адрес9; F1132=2; G1132=сварка; V1132=замена задвижки.

При формировании работ на следующий день данная информация копируется в новые сутки в этой же таблице с новой датой, удаляются строки выполненных работ (факт выполнения проставляется в столбце F в конце смены: 1 - выполнено, 2 - перенос работы на завтра) и добавляются новые задания согласно поступившей заявке. Свежие данные располагаются на этом же листе под таблицей через 3 пустых строки в таком же формате. Отличие только в новых адресах, например:

В1141=Иванов; Е1141=Адрес10;  F1141=вновь; G1141=раскоп вывоз; V1141=газон.
В1142=Иванов; Е1142=Адрес11; F1142=вновь; G1142=изоляция; перекрытие; засыпка; V1142=асфальт.
В1143=Петров; Е1143=Адрес12; F1143=вновь; G1143=раскоп вывоз; V1143=газон.
В1144=Петров; Е1144=Адрес13; F1144=вновь; G1144=изоляция; перекрытие; засыпка; V1144=асфальт.
В1142=Сидоров; Е1142=Адрес14; F1142=вновь; G1142=сварка; V1142=катушка 1м.

Требуется вырезать новые заявки под таблицей и вставить их в таблицу в работы следующего дня в определенной последовательности: по столбцу В сформировать данные по фамилиям, а по столбцу G распределить еще и по видам работ строго в определенной последовательности: 1) раскоп (вывоз или отвал не имеет значения), 2) изоляция, перекрытие, засыпка, 3) прочее/. Новые данные в таком раскладе должны вставать после работ, перенесенных с прошлых суток. Сварка распределяется только пофамильно и с условием, что новая заявка добавляется после заявки с переносом. Должен получиться следующий результат:

В1133=28.05.24
В1134=Иванов; Е1134=Адрес2; F1134=перенос; G1134=раскоп отвал; V1134=газон.
В1135=Иванов; Е1135=Адрес10;  F1135=вновь; G1135=раскоп вывоз; V1135=газон.
В1136=Иванов; Е1136=Адрес11; F1136=вновь; G1136=изоляция; перекрытие; засыпка; V1136=асфальт.
В1137=Иванов; Е1137=Адрес4; F1137=перенос; G1137=прочее/; V1137=перекрытие плит.
В1138=Петров; Е1138=Адрес5; F1138=перенос; G1138=раскоп отвал; V1138=газон.
В1139=Петров; Е1139=Адрес12; F1139=вновь; G1139=раскоп вывоз; V1139=газон.
В1140=Петров; Е1140=Адрес13; F1140=вновь; G1140=изоляция; перекрытие; засыпка; V1140=асфальт.
В1141=Сидоров; Е1141=Адрес9; F1141=перенос; G1141=сварка; V1141=замена задвижки.
В1142=Сидоров; Е1142=Адрес14; F1142=вновь; G1142=сварка; V1142=катушка 1м.
#16
Всем добрый день! Помогите, пожалуйста, доработать скрипт :-\
Мне нужно, чтобы по запуску скрипта копировался лист (как шаблон) из другой таблицы. И желательно, чтобы скопированный лист ставился не в конце, а в начале таблицы.
Я пока только учусь писать скрипты, написал следующий скрипт, который копирует лист из текущей таблицы, но ставит его в самый конец, что не очень удобно, так как много вкладок присутствует.
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');
}


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

Заранее благодарю!
#17
Умные люди помогите)

Итак есть файл https://docs.google.com/spreadsheets/d/1UDrQpUKfdT9SHsOZTQE-z6kIAtUJ2vkUgi59075UCs4/edit#gid=1350807426

В нем я хочу чтобы мне согласно листу-справочнику "ОПУ" на других листах при вводе значений из списка (столбец с названиями документов) выпадали вариации их статусов. Т.е. по сути выпадающий список, зависящий от введенного первоначального значения

для этого я написал вот такой скрипт в Apps Script

Цитировать
function dependList() {
let ss = SpreadsheetApp.openById('1UDrQpUKfdT9SHsOZTQE-z6kIAtUJ2vkUgi59075UCs4');
let sheet = ss.getSheetByName('111')
let opy = ss.getSheetByName('ОПУ');

let ar = sheet.getActiveCell();
let valueToFind = ar.getValue();

let values = opy.getRange(4, 3,opy.getLastRow(), 1).getValues();
console.log(values);
let row = values[0].indexOf(valueToFind)+5;
console.log(row);

let status = opy.getRange(row, 4,1,5).getValues();
console.log(status);

let validation = SpreadsheetApp.newDataValidation().requireValueInList(status).build();

ar.offset(0,1).setDataValidation(validation);

}


Вопросов несколько

1. Самое главное) Скрипт выдает мне все что нужно через консоль, но почему то не появляется выпадающий список на листе "111"

2. Когда написал let row = values[0].indexOf(valueToFind) и вывел в консоль мне выдало -1 - не могу понять почему так. Пришлось сделать +5

3. Мне нужно чтобы скрипт наботал на листах, начинающихся со слова WBS. и при этом только в определенных столбцах. Не придумал как задать это ограничение

и еще
ккк бы мне сохранить этот (да и другие) скрипт чтобы потом его юзать в других таблицах? Условно назвать его "выпадающие списки" и потом где то нажать кнопку и он активируется (при том что это совсем другая гугл таблица) ???
#18
Спасибо огромное за помощь Casag!  :-D Работает скрипт! Вы просто гений 8-)
#19
Добрый день! Не надо ничего дублировать. Замените строку макроса
const specificSheet = "Лист2" на
const specificSheet = "Онлайн табло Мюнхена"  ( указываете название листа на котором макрос НЕ ДОЛЖЕН РАБОТАТЬ)
И строку :          if (sourceSheet == specificSheet && cellIndex == specificCell) {
замените на:      if (sourceSheet != specificSheet && cellIndex == specificCell) {

Макрос будет срабатывать на всех листах книги кроме указаного в строке  const specificSheet

Удачи!
#20
У меня в основном рабочем графике каждый новый месяц копируется в новый лист, а там уже правятся рабочие часы и так далее... Вот хотелось бы, чтобы допустим, при копировании в новый лист, скрипт также работал.  :-\

У каждого нового листа соответствующее название новому месяцу (Август_2024/Сентябрь_2024/Октябрь_2024) и так далее. Можно ли так сделать? Пытался сам, но не понимаю, как скрипт можно продублировать.
Яндекс.Метрика Рейтинг@Mail.ru