Доброго времени. Помоги, плз, с решением: в столбцы "а","в","с" (таблица_1) импортируются данные из другой гугл-таблицы (таблица_2), а в столбец "d" данные заносятся вручную . Если в таблице_2 удалить какую-нибудь строку, то в таблице_1 в столбцах "а", "в","с" строки также удалятся, а вот данные в столце "d" останутся. Как сделать так, чтобы в таблице_1 данные удалялись и из столбца "d"? Можно ли связать столбцы а, в,с и d?
Доброго времени. Помоги, плз, с решением: в столбцы "а","в","с" (таблица_1) импортируются данные из другой гугл-таблицы (таблица_2), а в столбец "d" данные заносятся вручную . Если в таблице_2 удалить какую-нибудь строку, то в таблице_1 в столбцах "а", "в","с" строки также удалятся, а вот данные в столце "d" останутся. Как сделать так, чтобы в таблице_1 данные удалялись и из столбца "d"? Можно ли связать столбцы а, в,с и d?maragva
Сообщение отредактировал maragva - Вторник, 25.04.2017, 08:36
в столбцы "а","в","с" (таблица_1) импортируются данные из другой гугл-таблицы (таблица_2), а в столбец "d" данные заносятся вручную .
Каким образом импортируются - при помощи функции IMPORTRANGE или копированием?
1. Если IMPORTRANGE, то, увы, практически только вручную, причем сначала удаляя строку из таблицы_1, там где колонка D ведётся, а потом, визуально запомнив какую строку удалили, идём в таблицу_2 и удаляем ту же строку по порядку от начала таблицы. Согласен, алгоритм - уныл и ужасен, но он - лишь следствие исходной ужасной организации работы с данными. Вести в этом случае колонку D - это примерно как делать "заметки на полях" сводной таблицы в Excel и недоумевать почему всё кривенько разъехалось при очередном её пересчете... А еще вы подумали, что в таблице_2 кто-то может независимо от вас посортировать записи?..
2. Если же данные импортируются копированием (вручную или скриптом), то нужно писать некоторый скрипт сихронизации, позаботившись об уникальной нумерации записей в обеих таблицах - иначе на что опираться при связи?..
P.S. А впрочем, если ничего такого страшного в плане перемешивания записей для случая 1 гарантированно не предвидится, то, наверное, можно написать и скрипт, тупо удаляющий из таблицы_1 строки с теми же номерами, которые только что удалили из таблицы_2.
в столбцы "а","в","с" (таблица_1) импортируются данные из другой гугл-таблицы (таблица_2), а в столбец "d" данные заносятся вручную .
Каким образом импортируются - при помощи функции IMPORTRANGE или копированием?
1. Если IMPORTRANGE, то, увы, практически только вручную, причем сначала удаляя строку из таблицы_1, там где колонка D ведётся, а потом, визуально запомнив какую строку удалили, идём в таблицу_2 и удаляем ту же строку по порядку от начала таблицы. Согласен, алгоритм - уныл и ужасен, но он - лишь следствие исходной ужасной организации работы с данными. Вести в этом случае колонку D - это примерно как делать "заметки на полях" сводной таблицы в Excel и недоумевать почему всё кривенько разъехалось при очередном её пересчете... А еще вы подумали, что в таблице_2 кто-то может независимо от вас посортировать записи?..
2. Если же данные импортируются копированием (вручную или скриптом), то нужно писать некоторый скрипт сихронизации, позаботившись об уникальной нумерации записей в обеих таблицах - иначе на что опираться при связи?..
P.S. А впрочем, если ничего такого страшного в плане перемешивания записей для случая 1 гарантированно не предвидится, то, наверное, можно написать и скрипт, тупо удаляющий из таблицы_1 строки с теми же номерами, которые только что удалили из таблицы_2.Gustav
А впрочем, если ничего такого страшного в плане перемешивания записей для случая 1 гарантированно не предвидится, то, наверное, можно написать и скрипт, тупо удаляющий из таблицы_1 строки с теми же номерами, которые только что удалили из таблицы_2.
Что ж, конкретно для этого случая сложилась вполне себе осязаемая функция, автоматически удаляющая одну и ту же строку в обеих таблицах. Это будет происходить при вводе в определенную ячейку этой строки в таблице_2 значения ("хэштега") #УДАЛИТЬНАФИГ (именно так, большими буквами и с диезом впереди).
Скрипт нужно будет поместить также в Редактор скриптов таблицы_2. В строку "var sheet1 = …" нужно будет прописать свой 44-хсимвольный страшенный идентификатор таблицы_1. В качестве "сигнальной" колонки в примере принята колонка E (пятая). Как только пользователь введет в ячейку этой колонки #УДАЛИТЬНАФИГ, так сразу же соответствующая строка и удалится из обеих таблиц. [vba]
Код
// *** глобальные переменные, видимые во всех функциях var sheet1 = SpreadsheetApp.openById("1XE.....u-iN22zzp3poAqpJ6TXMAbVCu3MGw.....aw").getSheetByName("Лист1"); var sheet2 = SpreadsheetApp.getActive().getSheetByName("Лист1");
var range2 = sheet2.getRange("E3:E8"); // для отдельного тестирования deleteRowsByTag()
// *** функция-триггер, срабатывающая при изменении содержимого ячеек function onEdit(e) {
// фрагмент этой функции, следящий за появлением на Листе1 в таблица_2 в колонке E (5-я) хэштега #УДАЛИТЬНАФИГ if (e.range.getSheet().getName() == sheet2.getName() && e.range.getColumn() == 5) { range2 = e.range; deleteRowsByTag(); // удаление строк с хэштегом #УДАЛИТЬНАФИГ в колонке E }
// в функции также могут быть другие фрагменты (IFчики), отвечающие за другие задачи }
// *** функция удаления строк (можно протестировать отдельно от onEdit, задав нужный range2 в глобальной секции) function deleteRowsByTag() {
var rows2del = []; // формируемый массив строк для удаления for (var i=range2.getNumRows(); i>=1; i--) { // для обеспечения сортировки по убыванию if (range2.getCell(i, 1).getValue() == "#УДАЛИТЬНАФИГ") { rows2del.push(range2.getCell(i, 1).getRow()); // номер удаляемой строки -> в массив } }
for (i=0; i<=rows2del.length-1; i++) { Logger.log(rows2del[i]); // номера удаляемых строк -> в Вид \ Журналы sheet2.deleteRow(rows2del[i]); // удаляем из таблица_2 sheet1.deleteRow(rows2del[i]); // удаляем из таблица_1 } }
[/vba]
P.S. Кстати, замечательно работает на Андроиде - только что проверил на смартфоне. Так что, можно разработать целую систему хэштэгов-команд и вводить их в определенные ячейки для выполнения над данными тех или иных действий, прописанных в onEdit.
А впрочем, если ничего такого страшного в плане перемешивания записей для случая 1 гарантированно не предвидится, то, наверное, можно написать и скрипт, тупо удаляющий из таблицы_1 строки с теми же номерами, которые только что удалили из таблицы_2.
Что ж, конкретно для этого случая сложилась вполне себе осязаемая функция, автоматически удаляющая одну и ту же строку в обеих таблицах. Это будет происходить при вводе в определенную ячейку этой строки в таблице_2 значения ("хэштега") #УДАЛИТЬНАФИГ (именно так, большими буквами и с диезом впереди).
Скрипт нужно будет поместить также в Редактор скриптов таблицы_2. В строку "var sheet1 = …" нужно будет прописать свой 44-хсимвольный страшенный идентификатор таблицы_1. В качестве "сигнальной" колонки в примере принята колонка E (пятая). Как только пользователь введет в ячейку этой колонки #УДАЛИТЬНАФИГ, так сразу же соответствующая строка и удалится из обеих таблиц. [vba]
Код
// *** глобальные переменные, видимые во всех функциях var sheet1 = SpreadsheetApp.openById("1XE.....u-iN22zzp3poAqpJ6TXMAbVCu3MGw.....aw").getSheetByName("Лист1"); var sheet2 = SpreadsheetApp.getActive().getSheetByName("Лист1");
var range2 = sheet2.getRange("E3:E8"); // для отдельного тестирования deleteRowsByTag()
// *** функция-триггер, срабатывающая при изменении содержимого ячеек function onEdit(e) {
// фрагмент этой функции, следящий за появлением на Листе1 в таблица_2 в колонке E (5-я) хэштега #УДАЛИТЬНАФИГ if (e.range.getSheet().getName() == sheet2.getName() && e.range.getColumn() == 5) { range2 = e.range; deleteRowsByTag(); // удаление строк с хэштегом #УДАЛИТЬНАФИГ в колонке E }
// в функции также могут быть другие фрагменты (IFчики), отвечающие за другие задачи }
// *** функция удаления строк (можно протестировать отдельно от onEdit, задав нужный range2 в глобальной секции) function deleteRowsByTag() {
var rows2del = []; // формируемый массив строк для удаления for (var i=range2.getNumRows(); i>=1; i--) { // для обеспечения сортировки по убыванию if (range2.getCell(i, 1).getValue() == "#УДАЛИТЬНАФИГ") { rows2del.push(range2.getCell(i, 1).getRow()); // номер удаляемой строки -> в массив } }
for (i=0; i<=rows2del.length-1; i++) { Logger.log(rows2del[i]); // номера удаляемых строк -> в Вид \ Журналы sheet2.deleteRow(rows2del[i]); // удаляем из таблица_2 sheet1.deleteRow(rows2del[i]); // удаляем из таблица_1 } }
[/vba]
P.S. Кстати, замечательно работает на Андроиде - только что проверил на смартфоне. Так что, можно разработать целую систему хэштэгов-команд и вводить их в определенные ячейки для выполнения над данными тех или иных действий, прописанных в onEdit.Gustav
А может и в самом деле завязаться на номер строки?
А манагерша разрешит, чтобы в ее файле этот номер формировался? Речь идёт не о встроенной нумерации строк таблицы слева (она нас никак не спасает), а о генерации некоторого номера (Id) в некоторой свободной дальней колонке справа, например, в колонке Z.
Предполагается, что формирование этого номера будет встроено в функцию onEdit и при редактировании любой ячейки будет проверяться, есть ли уже в этой строке число (номер) в колонке Z. Если число уже есть, то ничего не происходит, а если нет, то генерируется новый номер - на единицу больше предыдущего сгенерированного номера. Последний используемый номер нужно будет где-то хранить в файле манагерши, например, на некотором листе "Параметры" (лист можно скрыть).
А может и в самом деле завязаться на номер строки?
А манагерша разрешит, чтобы в ее файле этот номер формировался? Речь идёт не о встроенной нумерации строк таблицы слева (она нас никак не спасает), а о генерации некоторого номера (Id) в некоторой свободной дальней колонке справа, например, в колонке Z.
Предполагается, что формирование этого номера будет встроено в функцию onEdit и при редактировании любой ячейки будет проверяться, есть ли уже в этой строке число (номер) в колонке Z. Если число уже есть, то ничего не происходит, а если нет, то генерируется новый номер - на единицу больше предыдущего сгенерированного номера. Последний используемый номер нужно будет где-то хранить в файле манагерши, например, на некотором листе "Параметры" (лист можно скрыть).Gustav
Манагерша (а её там штук шесть) работает тока с таблицей_2. С таблицей_1 работаю я. Манагерша накидывает данные, удаляет и передвигает строки... Заполнив таблицу_2 примерно 150-й строки пакетно (10-20 строк) удаляет строки сверху. Получается, что ID строки надо закольцовывать, выбрать пул, скажем, на 180 номеров и дойдя до конца, опять с нуля. Я такой скрипт не смогу реализовать. Никогда )))) Скрипты у меня вообще "не айс"
Манагерша (а её там штук шесть) работает тока с таблицей_2. С таблицей_1 работаю я. Манагерша накидывает данные, удаляет и передвигает строки... Заполнив таблицу_2 примерно 150-й строки пакетно (10-20 строк) удаляет строки сверху. Получается, что ID строки надо закольцовывать, выбрать пул, скажем, на 180 номеров и дойдя до конца, опять с нуля. Я такой скрипт не смогу реализовать. Никогда )))) Скрипты у меня вообще "не айс"maragva
Не надо ничего закольцовывать - лишний головняк! Пусть ID генерируются себе от 1 в бесконечность. Если станут напрягать сильно большие значения, то можно будет сбросить на 0, скажем, через год или какой-то другой срок. Много ли строк создается одной манагершой в неделю, в месяц?
Не надо ничего закольцовывать - лишний головняк! Пусть ID генерируются себе от 1 в бесконечность. Если станут напрягать сильно большие значения, то можно будет сбросить на 0, скажем, через год или какой-то другой срок. Много ли строк создается одной манагершой в неделю, в месяц?Gustav
Даже если "30" в неделю, то в год - 1500. Можно выделить каждой манагерше по стотысячному диапазону: у 1-й нумерация начнется со 100000, у 2-й - с 200000 ... у 6-й - с 600000. И в таблице_1 по номеру сотни сразу будет видно, от какой манаги какая строка.
Файлы же у всех манагерш будут абсолютно одинаковы по структуре, с одинаковым кодом скрипта, за исключением стартового номера нумерации. Плюс некоторое количество каждого пула сразу придется потратить на уже существующее количество строк.
Даже если "30" в неделю, то в год - 1500. Можно выделить каждой манагерше по стотысячному диапазону: у 1-й нумерация начнется со 100000, у 2-й - с 200000 ... у 6-й - с 600000. И в таблице_1 по номеру сотни сразу будет видно, от какой манаги какая строка.
Файлы же у всех манагерш будут абсолютно одинаковы по структуре, с одинаковым кодом скрипта, за исключением стартового номера нумерации. Плюс некоторое количество каждого пула сразу придется потратить на уже существующее количество строк.Gustav
не-не, они хаотично данные закидывают. Персональные диапазоны излишние. Че-то слишком все заморачивается... Мне кажется, надо проще.
Так - в столбец "В" таблицы_1 импортируются данные из столбца "С" таблицы_2. Вопрос: можно ли привязать строки таблицы_1 к изменениям "В:В"? Логика несложная. Если кто-то в таблице_2 удалит какую-либо строку, то в таблице_1 в ячейке "В" данные тоже удалятся, а коли все остальные ячейки в строке этой таблицы привязаны к "В", то удалятся и они. Можно ли реализовать это программно???
не-не, они хаотично данные закидывают. Персональные диапазоны излишние. Че-то слишком все заморачивается... Мне кажется, надо проще.
Так - в столбец "В" таблицы_1 импортируются данные из столбца "С" таблицы_2. Вопрос: можно ли привязать строки таблицы_1 к изменениям "В:В"? Логика несложная. Если кто-то в таблице_2 удалит какую-либо строку, то в таблице_1 в ячейке "В" данные тоже удалятся, а коли все остальные ячейки в строке этой таблицы привязаны к "В", то удалятся и они. Можно ли реализовать это программно???maragva
Сообщение отредактировал maragva - Вторник, 02.05.2017, 15:23
можно ли привязать строки таблицы_1 к изменениям "В:В"?
Если предполагается сортировка или иная перестановка записей в таблице_2, а также вставка новой строки между существующими строками, то привязать можно только через Id в колонке Z, который должен присутствовать и в таблице_2, и в таблице_1. Не верите - обратитесь к теории реляционных баз данных.
Если кто-то в таблице_2 удалит какую-либо строку, то в таблице_1 в ячейке "В" данные тоже удалятся
Только в частном случае, когда строки в таблицу_2 ГАРАНТИРОВАННО добавляются последовательно в конец, не сортируются, не вставляются в середину, не переставляются иным образом. В этом случае возможно использование IMPORTRANGE и позиционное (по номеру строки Гугл) синхронное удаление из обеих таблиц. Скрипт для этого случая уже написан выше, в сообщении №4.
И да - такое синхронное удаление возможно либо с помощью использования командного хэштега и событийной функции onEdit, которая реагирует на появление этого хэштега в определенной ячейке; либо с помощью выполнения специально написанной команды меню (не командой меню Гугл!), которая удалит помеченные некоторым образом (хэштегом или просто выделением) строки в одной и в другой таблице.
Просто удалить строки из таблицы_2 штатным функционалом Гугл и желать, чтобы из таблицы_1 строки с такими же номерами (Гугл) также удалились - БЕСПОЛЕЗНО, так как на сегодняшний день в таблицах Гугл не существует обрабатываемого события, связанного с удалением строк: onEdit на удаление строк никак не реагирует и, значит, никакой код скрипта при этом автоматически не запустится.
можно ли привязать строки таблицы_1 к изменениям "В:В"?
Если предполагается сортировка или иная перестановка записей в таблице_2, а также вставка новой строки между существующими строками, то привязать можно только через Id в колонке Z, который должен присутствовать и в таблице_2, и в таблице_1. Не верите - обратитесь к теории реляционных баз данных.
Если кто-то в таблице_2 удалит какую-либо строку, то в таблице_1 в ячейке "В" данные тоже удалятся
Только в частном случае, когда строки в таблицу_2 ГАРАНТИРОВАННО добавляются последовательно в конец, не сортируются, не вставляются в середину, не переставляются иным образом. В этом случае возможно использование IMPORTRANGE и позиционное (по номеру строки Гугл) синхронное удаление из обеих таблиц. Скрипт для этого случая уже написан выше, в сообщении №4.
И да - такое синхронное удаление возможно либо с помощью использования командного хэштега и событийной функции onEdit, которая реагирует на появление этого хэштега в определенной ячейке; либо с помощью выполнения специально написанной команды меню (не командой меню Гугл!), которая удалит помеченные некоторым образом (хэштегом или просто выделением) строки в одной и в другой таблице.
Просто удалить строки из таблицы_2 штатным функционалом Гугл и желать, чтобы из таблицы_1 строки с такими же номерами (Гугл) также удалились - БЕСПОЛЕЗНО, так как на сегодняшний день в таблицах Гугл не существует обрабатываемого события, связанного с удалением строк: onEdit на удаление строк никак не реагирует и, значит, никакой код скрипта при этом автоматически не запустится.Gustav
Упс! Как интересно... После правки предыдущего сообщения из него незаметно пропала первая цитата и вопрос: одна ли таблица_2 или их шесть - по числу манагерш?
Упс! Как интересно... После правки предыдущего сообщения из него незаметно пропала первая цитата и вопрос: одна ли таблица_2 или их шесть - по числу манагерш?Gustav