Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Ежедневное добавление столбцов ImportXML - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Ежедневное добавление столбцов ImportXML
ZAA Дата: Пятница, 18.10.2019, 09:46 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый день, уважаемые форумчане.
С вашей помощью настраиваю мониторинг различных сайтов под свои нужды, используя ImportXML.
Пока выходит вот что:
https://docs.google.com/spreads....3161665

Всё отлично, но столкнулся с новой задачей: необходимо автосохранение цены ежедневно в новый столбец, с указанием даты.
(чтобы видеть динамику изменения)
Интуитивно понимаю, что нужен скрипт на GAP, но не нашёл пока, в какую сторону копать.
Как обычно, буду рад любому совету.
 
Ответить
СообщениеДобрый день, уважаемые форумчане.
С вашей помощью настраиваю мониторинг различных сайтов под свои нужды, используя ImportXML.
Пока выходит вот что:
https://docs.google.com/spreads....3161665

Всё отлично, но столкнулся с новой задачей: необходимо автосохранение цены ежедневно в новый столбец, с указанием даты.
(чтобы видеть динамику изменения)
Интуитивно понимаю, что нужен скрипт на GAP, но не нашёл пока, в какую сторону копать.
Как обычно, буду рад любому совету.

Автор - ZAA
Дата добавления - 18.10.2019 в 09:46
Kashimirush Дата: Пятница, 18.10.2019, 11:38 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 240
Репутация: 41 ±
Замечаний: 0% ±

Excel 2010
Вполне можно обойтись встроенным макрорекордером, если я вас правильно понял, скрипт примерно такой:
[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 - Пятница, 18.10.2019, 15:40
 
Ответить
СообщениеВполне можно обойтись встроенным макрорекордером, если я вас правильно понял, скрипт примерно такой:
[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
Дата добавления - 18.10.2019 в 11:38
Kashimirush Дата: Понедельник, 21.10.2019, 13:22 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 240
Репутация: 41 ±
Замечаний: 0% ±

Excel 2010
скрипт примерно такой

Не совсем такой, у вас несколько листов на которых нужно выполнить скрипт (предыдущий вариант рассчитан только на активный лист. Для работы на нескольких листах нужно будет продублировать строки:

[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]


Работа, работа, перейди на Федота...

Сообщение отредактировал Kashimirush - Понедельник, 21.10.2019, 13:23
 
Ответить
Сообщение
скрипт примерно такой

Не совсем такой, у вас несколько листов на которых нужно выполнить скрипт (предыдущий вариант рассчитан только на активный лист. Для работы на нескольких листах нужно будет продублировать строки:

[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]

Автор - Kashimirush
Дата добавления - 21.10.2019 в 13:22
Gustav Дата: Понедельник, 21.10.2019, 13:54 | Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2809
Репутация: 1184 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Для работы на нескольких листах нужно будет продублировать строки

А если таких листов будет 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);
    });
}
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Для работы на нескольких листах нужно будет продублировать строки

А если таких листов будет 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);
    });
}
[/vba]

Автор - Gustav
Дата добавления - 21.10.2019 в 13:54
ZAA Дата: Вторник, 22.10.2019, 10:00 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Спасибо! Буду копаться на досуге. Как изучу/докручу - отпишусь.
 
Ответить
СообщениеСпасибо! Буду копаться на досуге. Как изучу/докручу - отпишусь.

Автор - ZAA
Дата добавления - 22.10.2019 в 10:00
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!