Здравствуйте! Уважаемые, есть у меня проблемка. Заключается она в следующем: нужно в Google таблицах сделать так, что если в 8 столбце появляется слово "да", то вся эта строчка переходит в другой файл. Нарыл я следующее: 1)Всё тоже самое, что и у меня можно реализовать через function onedit 2)IMPORTRANGE не подходит, т.к. это именно ссылка, а мне нужны значения, да и ссылок этих будет много. 3)Нужно быть аккуратнее с такими вещами как выделение и последующее копирование, так как таблица используется несколькими людьми сразу. А теперь вопросы: 1)Как переделать мой код написанный в VBA(он в файле) под google script(а может даже и без него можно обойтись, хотя я очень сомневаюсь) 2)Как я понял тут нужно разрешение на доступ к изменениям в файле. Это разрешение должен давать каждый из пользователей файлами или достаточно, чтобы владелец файла разрешил один раз и всё? И вот файлы в google: Файл №2 Файл №1 Всем огромное спасибо. Я понимаю, что тут, возможно, не так много людей понимающих в google scripts.(может тогда есть дельный форум по этой теме?) В любом случае всем спасибо за Ваше внимание. А если уж поучаствуете, то
Здравствуйте! Уважаемые, есть у меня проблемка. Заключается она в следующем: нужно в Google таблицах сделать так, что если в 8 столбце появляется слово "да", то вся эта строчка переходит в другой файл. Нарыл я следующее: 1)Всё тоже самое, что и у меня можно реализовать через function onedit 2)IMPORTRANGE не подходит, т.к. это именно ссылка, а мне нужны значения, да и ссылок этих будет много. 3)Нужно быть аккуратнее с такими вещами как выделение и последующее копирование, так как таблица используется несколькими людьми сразу. А теперь вопросы: 1)Как переделать мой код написанный в VBA(он в файле) под google script(а может даже и без него можно обойтись, хотя я очень сомневаюсь) 2)Как я понял тут нужно разрешение на доступ к изменениям в файле. Это разрешение должен давать каждый из пользователей файлами или достаточно, чтобы владелец файла разрешил один раз и всё? И вот файлы в google: Файл №2 Файл №1 Всем огромное спасибо. Я понимаю, что тут, возможно, не так много людей понимающих в google scripts.(может тогда есть дельный форум по этой теме?) В любом случае всем спасибо за Ваше внимание. А если уж поучаствуете, то abra-kadabra
function onEdit(e) { if (e.range.getColumn() == 8 && e.range.getValue() == "да") { var id_otherss = "1fWO0k_wS1-dQ-OFykPUOS833s5E3VgPQW1qyinJn5z4"; //файл куда копируем var otherss = SpreadsheetApp.openById(id_otherss); //открываем другой файл var othersheet = otherss.getSheetByName("ура"); //название листа в другом файле var k = 0; //на сколько смещать вниз var occupied = 0; //если занято
var stolb1 = e.range.offset(0,-7).getValue(); var stolb2 = e.range.offset(0,-6).getValue(); var stolb3 = e.range.offset(0,-3).getValue();
for (var i=1; i<=3 ; i++) { if (othersheet.getRange((1+k+occupied), i).getValue() !== "") //если занято { occupied++; i=1;
[/vba] Вот, что у меня получилось спустя несколько дней(язык зверски похож на C++, так что особых сложностей не возникло) файл Файл №3 Вопросы: 1)Какие нужны разрешения?Теперь конкретно: а)Если у меня есть доступ к файлу(редактирование)(я не владелец), то могу ли я просто вставить скрипт и радоваться? б)Достаточно ли один раз дать разрешение или каждый из пользователей должен соглашаться? 2)В конце мне нужно открыть получившийся файл и выбрать ячейку последнюю. Как это сделать(openbyid работает не так)
[vba]
Код
function onEdit(e) { if (e.range.getColumn() == 8 && e.range.getValue() == "да") { var id_otherss = "1fWO0k_wS1-dQ-OFykPUOS833s5E3VgPQW1qyinJn5z4"; //файл куда копируем var otherss = SpreadsheetApp.openById(id_otherss); //открываем другой файл var othersheet = otherss.getSheetByName("ура"); //название листа в другом файле var k = 0; //на сколько смещать вниз var occupied = 0; //если занято
var stolb1 = e.range.offset(0,-7).getValue(); var stolb2 = e.range.offset(0,-6).getValue(); var stolb3 = e.range.offset(0,-3).getValue();
for (var i=1; i<=3 ; i++) { if (othersheet.getRange((1+k+occupied), i).getValue() !== "") //если занято { occupied++; i=1;
[/vba] Вот, что у меня получилось спустя несколько дней(язык зверски похож на C++, так что особых сложностей не возникло) файл Файл №3 Вопросы: 1)Какие нужны разрешения?Теперь конкретно: а)Если у меня есть доступ к файлу(редактирование)(я не владелец), то могу ли я просто вставить скрипт и радоваться? б)Достаточно ли один раз дать разрешение или каждый из пользователей должен соглашаться? 2)В конце мне нужно открыть получившийся файл и выбрать ячейку последнюю. Как это сделать(openbyid работает не так)abra-kadabra
Ваш пример(я специально копирую на форум, чтобы код всегда был тут на случай если с файлами что-то случится): [vba]
Код
var Idsheet = '1fWO0k_wS1-dQ-OFykPUOS833s5E3VgPQW1qyinJn5z4'//Ид книги вставки данных var SName = 'Лист1'; // Имя листа для отслеживания изменений var Column = 8; //Номер столбца function onEdits(e) { var range = e.range; if (range.getColumn() != Column) { return; } var dt = range.getValue(); if (dt != 'да') { return; } var sheet = SpreadsheetApp.getActiveSheet(); var SheetName = sheet.getSheetName(); if (SheetName != SName) { return; }; var sh = SpreadsheetApp.openById(Idsheet); var LastRow = get_LastRow(sh.getRange("A:A")) + 1;
var A = range.offset(0, 1 - Column).getValue(); var B = new Date(range.offset(0, 2 - Column).getValue()); var E = range.offset(0, 5 - Column).getValue(); sh.getRange("A" + LastRow).setValue(A); sh.getRange("B" + LastRow).setValue(B); sh.getRange("C" + LastRow).setValue(E);
[/vba] 1)СПАСИБО! 2) Ваш код не правильно год переносит 3) Я не очень понял начиная с "var LastRow = get_LastRow(sh.getRange("A:A")) + 1;" а) Зачем брать целый столбец и добавлять один? б)Да и дальше где к столбцам прибавляется последняя строчка... тоже не очень Добавьте пожалуйста комментариев.
Ваш пример(я специально копирую на форум, чтобы код всегда был тут на случай если с файлами что-то случится): [vba]
Код
var Idsheet = '1fWO0k_wS1-dQ-OFykPUOS833s5E3VgPQW1qyinJn5z4'//Ид книги вставки данных var SName = 'Лист1'; // Имя листа для отслеживания изменений var Column = 8; //Номер столбца function onEdits(e) { var range = e.range; if (range.getColumn() != Column) { return; } var dt = range.getValue(); if (dt != 'да') { return; } var sheet = SpreadsheetApp.getActiveSheet(); var SheetName = sheet.getSheetName(); if (SheetName != SName) { return; }; var sh = SpreadsheetApp.openById(Idsheet); var LastRow = get_LastRow(sh.getRange("A:A")) + 1;
var A = range.offset(0, 1 - Column).getValue(); var B = new Date(range.offset(0, 2 - Column).getValue()); var E = range.offset(0, 5 - Column).getValue(); sh.getRange("A" + LastRow).setValue(A); sh.getRange("B" + LastRow).setValue(B); sh.getRange("C" + LastRow).setValue(E);
[/vba] 1)СПАСИБО! 2) Ваш код не правильно год переносит 3) Я не очень понял начиная с "var LastRow = get_LastRow(sh.getRange("A:A")) + 1;" а) Зачем брать целый столбец и добавлять один? б)Да и дальше где к столбцам прибавляется последняя строчка... тоже не очень Добавьте пожалуйста комментариев.abra-kadabra
Коллеги, смотрю ищете позицию для вставки записи в конец таблицы. На всякий случай информирую, что у листа есть на этот случай специальный метод appendRow: [vba]
Код
var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0];
// Appends a new row with 3 columns to the bottom of the // spreadsheet containing the values in the array sheet.appendRow(["a man", "a plan", "panama"]);
[/vba] Код вставит три текстовых значения в последнюю (новую) строку листа в колонки A:C.
Коллеги, смотрю ищете позицию для вставки записи в конец таблицы. На всякий случай информирую, что у листа есть на этот случай специальный метод appendRow: [vba]
Код
var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0];
// Appends a new row with 3 columns to the bottom of the // spreadsheet containing the values in the array sheet.appendRow(["a man", "a plan", "panama"]);
[/vba] Код вставит три текстовых значения в последнюю (новую) строку листа в колонки A:C.Gustav
Да, как ни странно(я думал грузиться долго будет) сработало. В итоге вот, что вышло(двумерный массив очень уж грузил, поэтому я отказался от варианта doober): [vba]
Код
function onEdit(e) { if (e.range.getColumn() == 8 && e.range.getValue() == "да") { var id_otherss = "1fWO0k_wS1-dQ-OFykPUOS833s5E3VgPQW1qyinJn5z4"; //файл куда копируем var name_sheet = "ура"; //название листа var date_col = "B"; var otherss = SpreadsheetApp.openById(id_otherss); //открываем другой файл var othersheet = otherss.getSheetByName(name_sheet); //название листа в другом файле var k = 0; //на сколько смещать вниз var occupied = 0; //если занято
var stolb1 = e.range.offset(0,-7).getValue(); var stolb2 = e.range.offset(0,-6).getValue(); var stolb3 = e.range.offset(0,-3).getValue();
othersheet.appendRow([stolb1, stolb2, stolb3]); othersheet.getRange(date_col + ":" + date_col).setNumberFormat("dd-mm-yyyy"); //весь столбец к одному формату
openNewWindow(id_otherss);
}; }
function openNewWindow(id) { var htmlString = '<div>' + '<input type="button" value="Close" onclick="google.script.host.close()" />' + //создаём кнопку на всякий '</div>' + '<script>'+ 'window.open("https://docs.google.com/spreadsheets/d/'+ id +'");'+ //переходим на нужную страницу 'google.script.host.close();'+ //закрываемся '</script>';
var htmlOutput = HtmlService .createHtmlOutput(htmlString) .setSandboxMode(HtmlService.SandboxMode.IFRAME) .setHeight(60);
SpreadsheetApp .getUi() .showModalDialog(htmlOutput, 'Щас всё будет...');
}
[/vba] Всем Огромное СПАСИБО за помощь Единственное что, т.к. это мой дебют в js, то может кто какие замечания сделает?
Да, как ни странно(я думал грузиться долго будет) сработало. В итоге вот, что вышло(двумерный массив очень уж грузил, поэтому я отказался от варианта doober): [vba]
Код
function onEdit(e) { if (e.range.getColumn() == 8 && e.range.getValue() == "да") { var id_otherss = "1fWO0k_wS1-dQ-OFykPUOS833s5E3VgPQW1qyinJn5z4"; //файл куда копируем var name_sheet = "ура"; //название листа var date_col = "B"; var otherss = SpreadsheetApp.openById(id_otherss); //открываем другой файл var othersheet = otherss.getSheetByName(name_sheet); //название листа в другом файле var k = 0; //на сколько смещать вниз var occupied = 0; //если занято
var stolb1 = e.range.offset(0,-7).getValue(); var stolb2 = e.range.offset(0,-6).getValue(); var stolb3 = e.range.offset(0,-3).getValue();
othersheet.appendRow([stolb1, stolb2, stolb3]); othersheet.getRange(date_col + ":" + date_col).setNumberFormat("dd-mm-yyyy"); //весь столбец к одному формату
openNewWindow(id_otherss);
}; }
function openNewWindow(id) { var htmlString = '<div>' + '<input type="button" value="Close" onclick="google.script.host.close()" />' + //создаём кнопку на всякий '</div>' + '<script>'+ 'window.open("https://docs.google.com/spreadsheets/d/'+ id +'");'+ //переходим на нужную страницу 'google.script.host.close();'+ //закрываемся '</script>';
var htmlOutput = HtmlService .createHtmlOutput(htmlString) .setSandboxMode(HtmlService.SandboxMode.IFRAME) .setHeight(60);
SpreadsheetApp .getUi() .showModalDialog(htmlOutput, 'Щас всё будет...');
}
[/vba] Всем Огромное СПАСИБО за помощь Единственное что, т.к. это мой дебют в js, то может кто какие замечания сделает?abra-kadabra
Сообщение отредактировал abra-kadabra - Среда, 10.05.2017, 03:15