Добрый день, уважаемые форумчане. С вашей помощью настраиваю мониторинг различных сайтов под свои нужды, используя ImportXML. Пока выходит вот что: https://docs.google.com/spreads....3161665
Всё отлично, но столкнулся с новой задачей: необходимо автосохранение цены ежедневно в новый столбец, с указанием даты. (чтобы видеть динамику изменения) Интуитивно понимаю, что нужен скрипт на GAP, но не нашёл пока, в какую сторону копать. Как обычно, буду рад любому совету.
Добрый день, уважаемые форумчане. С вашей помощью настраиваю мониторинг различных сайтов под свои нужды, используя ImportXML. Пока выходит вот что: https://docs.google.com/spreads....3161665
Всё отлично, но столкнулся с новой задачей: необходимо автосохранение цены ежедневно в новый столбец, с указанием даты. (чтобы видеть динамику изменения) Интуитивно понимаю, что нужен скрипт на GAP, но не нашёл пока, в какую сторону копать. Как обычно, буду рад любому совету.ZAA
Вполне можно обойтись встроенным макрорекордером, если я вас правильно понял, скрипт примерно такой: [vba]
Код
function CRLV() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('F:F').activate();//Вставляем новый столбец после столбца F spreadsheet.getActiveSheet().insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1); spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate(); spreadsheet.getRange('G1:G').activate();//Новые цены будут вставать в столбец G двигая предыдущие spreadsheet.getRange('B:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);//Указываем столбец откуда копируем цены spreadsheet.getRange('G1').activate();//Ячейка в которой будет вставлена дата var date = new Date(); spreadsheet.getActiveRangeList().setValue(date); };
[/vba] Смотрите примечания после //, чтобы натянуть скрипт на свою таблицу. После сохранения скрипта заходим в триггеры (кнопка похожая на часы в редакторе скриптов): Ставим триггер по времени своему скрипту.
Вполне можно обойтись встроенным макрорекордером, если я вас правильно понял, скрипт примерно такой: [vba]
Код
function CRLV() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('F:F').activate();//Вставляем новый столбец после столбца F spreadsheet.getActiveSheet().insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1); spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate(); spreadsheet.getRange('G1:G').activate();//Новые цены будут вставать в столбец G двигая предыдущие spreadsheet.getRange('B:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);//Указываем столбец откуда копируем цены spreadsheet.getRange('G1').activate();//Ячейка в которой будет вставлена дата var date = new Date(); spreadsheet.getActiveRangeList().setValue(date); };
[/vba] Смотрите примечания после //, чтобы натянуть скрипт на свою таблицу. После сохранения скрипта заходим в триггеры (кнопка похожая на часы в редакторе скриптов): Ставим триггер по времени своему скрипту.Kashimirush
Работа, работа, перейди на Федота...
Сообщение отредактировал Kashimirush - Пятница, 18.10.2019, 15:40
Не совсем такой, у вас несколько листов на которых нужно выполнить скрипт (предыдущий вариант рассчитан только на активный лист. Для работы на нескольких листах нужно будет продублировать строки:
[vba]
Код
function CRLV() { var spreadsheet = SpreadsheetApp.getActive(); var date = new Date(); //лист1 spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист1'), true);//Указываем лист spreadsheet.getRange('F:F').activate();//Вставляем новый столбец после столбца F spreadsheet.insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1); spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate(); spreadsheet.getRange('G:G').activate();//Новые цены будут вставать в столбец G двигая предыдущие spreadsheet.getRange('B:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);//Указываем столбец откуда копируем цены spreadsheet.getRange('G1').activate();//Ячейка в которой будет вставлена дата spreadsheet.getActiveRangeList().setValue(date); //Лист2 spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист2'), true);//Указываем лист spreadsheet.getRange('F:F').activate();//Вставляем новый столбец после столбца F spreadsheet.insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1); spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate(); spreadsheet.getRange('G:G').activate();//Новые цены будут вставать в столбец G двигая предыдущие spreadsheet.getRange('B:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);//Указываем столбец откуда копируем цены spreadsheet.getRange('G1').activate();//Ячейка в которой будет вставлена дата spreadsheet.getActiveRangeList().setValue(date); //Лист3 spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист3'), true);//Указываем лист spreadsheet.getRange('F:F').activate();//Вставляем новый столбец после столбца F spreadsheet.insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1); spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate(); spreadsheet.getRange('G:G').activate();//Новые цены будут вставать в столбец G двигая предыдущие spreadsheet.getRange('B:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);//Указываем столбец откуда копируем цены spreadsheet.getRange('G1').activate();//Ячейка в которой будет вставлена дата spreadsheet.getActiveRangeList().setValue(date); };
Не совсем такой, у вас несколько листов на которых нужно выполнить скрипт (предыдущий вариант рассчитан только на активный лист. Для работы на нескольких листах нужно будет продублировать строки:
[vba]
Код
function CRLV() { var spreadsheet = SpreadsheetApp.getActive(); var date = new Date(); //лист1 spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист1'), true);//Указываем лист spreadsheet.getRange('F:F').activate();//Вставляем новый столбец после столбца F spreadsheet.insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1); spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate(); spreadsheet.getRange('G:G').activate();//Новые цены будут вставать в столбец G двигая предыдущие spreadsheet.getRange('B:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);//Указываем столбец откуда копируем цены spreadsheet.getRange('G1').activate();//Ячейка в которой будет вставлена дата spreadsheet.getActiveRangeList().setValue(date); //Лист2 spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист2'), true);//Указываем лист spreadsheet.getRange('F:F').activate();//Вставляем новый столбец после столбца F spreadsheet.insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1); spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate(); spreadsheet.getRange('G:G').activate();//Новые цены будут вставать в столбец G двигая предыдущие spreadsheet.getRange('B:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);//Указываем столбец откуда копируем цены spreadsheet.getRange('G1').activate();//Ячейка в которой будет вставлена дата spreadsheet.getActiveRangeList().setValue(date); //Лист3 spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Лист3'), true);//Указываем лист spreadsheet.getRange('F:F').activate();//Вставляем новый столбец после столбца F spreadsheet.insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1); spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate(); spreadsheet.getRange('G:G').activate();//Новые цены будут вставать в столбец G двигая предыдущие spreadsheet.getRange('B:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);//Указываем столбец откуда копируем цены spreadsheet.getRange('G1').activate();//Ячейка в которой будет вставлена дата spreadsheet.getActiveRangeList().setValue(date); };
Для работы на нескольких листах нужно будет продублировать строки
А если таких листов будет 10 ? А если 100 ? Пора осваивать использование массивов: [vba]
Код
function CRLV() { var spreadsheet = SpreadsheetApp.getActive(); var date = new Date(); // перебор листов по списку, заданному массивом [ ] ['Лист1','Лист2','Лист3'].forEach(function(sheetName) { spreadsheet.setActiveSheet(spreadsheet.getSheetByName(sheetName), true);//Указываем лист spreadsheet.getRange('F:F').activate();//Вставляем новый столбец после столбца F spreadsheet.insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1); spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate(); spreadsheet.getRange('G:G').activate();//Новые цены будут вставать в столбец G двигая предыдущие spreadsheet.getRange('B:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);//Указываем столбец откуда копируем цены spreadsheet.getRange('G1').activate();//Ячейка в которой будет вставлена дата spreadsheet.getActiveRangeList().setValue(date); }); }
Для работы на нескольких листах нужно будет продублировать строки
А если таких листов будет 10 ? А если 100 ? Пора осваивать использование массивов: [vba]
Код
function CRLV() { var spreadsheet = SpreadsheetApp.getActive(); var date = new Date(); // перебор листов по списку, заданному массивом [ ] ['Лист1','Лист2','Лист3'].forEach(function(sheetName) { spreadsheet.setActiveSheet(spreadsheet.getSheetByName(sheetName), true);//Указываем лист spreadsheet.getRange('F:F').activate();//Вставляем новый столбец после столбца F spreadsheet.insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1); spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate(); spreadsheet.getRange('G:G').activate();//Новые цены будут вставать в столбец G двигая предыдущие spreadsheet.getRange('B:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);//Указываем столбец откуда копируем цены spreadsheet.getRange('G1').activate();//Ячейка в которой будет вставлена дата spreadsheet.getActiveRangeList().setValue(date); }); }