Помогите, пожалуйста с Google Docs. Нужно выполнить условие: Шаг 1: Если в ячейке A4 стоит значение (цена) - передать его в ячейку B4. Шаг 2: Если ячейка A4 пустая или имеет значение #N/A - ничего не передавать в ячейку B4 и важно - оставить предыдущее (ценовое) значение которое было с шага 1
Заранее прошу прощения если был косноязычен.
Добрый день!
Помогите, пожалуйста с Google Docs. Нужно выполнить условие: Шаг 1: Если в ячейке A4 стоит значение (цена) - передать его в ячейку B4. Шаг 2: Если ячейка A4 пустая или имеет значение #N/A - ничего не передавать в ячейку B4 и важно - оставить предыдущее (ценовое) значение которое было с шага 1
Заранее прошу прощения если был косноязычен.LexKWF
Что у Вас за процесс? Передачи - откуда? При каких условиях/событиях должна происходить передача/непередача в ячейку B4? В любом случае - формулами такое не сделать, нужно писать скрипт. А вот как и когда его потом запускать - зависит от Ваших ответов на вопросы.
Что у Вас за процесс? Передачи - откуда? При каких условиях/событиях должна происходить передача/непередача в ячейку B4? В любом случае - формулами такое не сделать, нужно писать скрипт. А вот как и когда его потом запускать - зависит от Ваших ответов на вопросы.Gustav
Что у Вас за процесс? - забор цен из прайс-листа партнеров
Передачи - откуда? - передача, т.е. запись значения из A4 в B4. В ячейке A4 могут быть значения: 1.Цена на товар в числовых значениях, 2. #N/A - ошибка, 3. Пустая ячейка. Записывать (передавать) значение из A4 в B4 нужно только в случае 1. В остальных двух - ничего не передавать.
Что у Вас за процесс? - забор цен из прайс-листа партнеров
Передачи - откуда? - передача, т.е. запись значения из A4 в B4. В ячейке A4 могут быть значения: 1.Цена на товар в числовых значениях, 2. #N/A - ошибка, 3. Пустая ячейка. Записывать (передавать) значение из A4 в B4 нужно только в случае 1. В остальных двух - ничего не передавать.LexKWF
Сообщение отредактировал LexKWF - Среда, 17.02.2021, 10:46
function price() { //Указываем нужный лист let ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Картон'); //Берём данные из выгрузки (Столбец A1) let lastRow = ss.getLastRow(); //Тут надо быть очень внимательным с индексами диапазона: getRange(row, column, numRows, numColumns) let inPrice = ss.getRange(4,1, lastRow-2, 1).getValues(); //Получаем длину массива: let lenthInPrice = inPrice.length //Поехали: for (let i=0;i<=lenthInPrice-1;i++){ if (typeof inPrice[i][0] == "number") { //Вставляем цену если её тип число в столбец 2 ss.getRange(i+4,2).setValue(inPrice[i][0]); }; }; }
[/vba]
Вот такой скриптик написал в вашем файле, не понятно, когда его запускать надо? Поставил триггер на редактирование в таблице, можно вывести на отдельную кнопку в файле. Изучайте, пилите под себя.
LexKWF,
[vba]
Код
function price() { //Указываем нужный лист let ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Картон'); //Берём данные из выгрузки (Столбец A1) let lastRow = ss.getLastRow(); //Тут надо быть очень внимательным с индексами диапазона: getRange(row, column, numRows, numColumns) let inPrice = ss.getRange(4,1, lastRow-2, 1).getValues(); //Получаем длину массива: let lenthInPrice = inPrice.length //Поехали: for (let i=0;i<=lenthInPrice-1;i++){ if (typeof inPrice[i][0] == "number") { //Вставляем цену если её тип число в столбец 2 ss.getRange(i+4,2).setValue(inPrice[i][0]); }; }; }
[/vba]
Вот такой скриптик написал в вашем файле, не понятно, когда его запускать надо? Поставил триггер на редактирование в таблице, можно вывести на отдельную кнопку в файле. Изучайте, пилите под себя.Kashimirush
Работа, работа, перейди на Федота...
Сообщение отредактировал Kashimirush - Четверг, 18.02.2021, 12:38
Благодарю! Отлично работает! Однако я пытаюсь изменить столбцы откуда и куда идет передача и начинает работать плохо. К стыду своему я не смог разобраться, прошу ответить на вопросы:
Благодарю! Отлично работает! Однако я пытаюсь изменить столбцы откуда и куда идет передача и начинает работать плохо. К стыду своему я не смог разобраться, прошу ответить на вопросы:LexKWF
Если по-русски: Метод getRange(row, column, numRows, numColumns) - Возвращает диапазон с верхней левой ячейкой с заданными координатами, где: row - Порядковый номер первой строки column - тоже самое первой колонки (тобишь столбца) numRows - Количество строк numColumns - Количество столбцов К примеру getRange(1,1,3,3) Вернет диапазон A1:C3 По остальным вопросам, если я вам отвечу, что inPrice[i][0], i и 0 это индексы массива, вам перед этим надо знать что такое массив. Изучайте документацию : Что такое массивы в JS Учебник JS
Если по-русски: Метод getRange(row, column, numRows, numColumns) - Возвращает диапазон с верхней левой ячейкой с заданными координатами, где: row - Порядковый номер первой строки column - тоже самое первой колонки (тобишь столбца) numRows - Количество строк numColumns - Количество столбцов К примеру getRange(1,1,3,3) Вернет диапазон A1:C3 По остальным вопросам, если я вам отвечу, что inPrice[i][0], i и 0 это индексы массива, вам перед этим надо знать что такое массив. Изучайте документацию : Что такое массивы в JS Учебник JS
Это скорее всего из-за того что у вас уже есть скрипт onEdit в таблице, если Вы триггер пытаетесь назначит на столбец , который уже участвует в Скрипте с onEdit, то между скриптами будет ругань. Имейте ввиду чем больше пользователей и данных - тем хуже работает onEdit.
К слову об этом: Не обязательно копирование цен делать онлайн, можно поставить кнопку и обновлять по нажатию, так скрипт работать будет стабильнее, чем по триггеру при изменении любой ячейки.
Это скорее всего из-за того что у вас уже есть скрипт onEdit в таблице, если Вы триггер пытаетесь назначит на столбец , который уже участвует в Скрипте с onEdit, то между скриптами будет ругань. Имейте ввиду чем больше пользователей и данных - тем хуже работает onEdit.
К слову об этом: Не обязательно копирование цен делать онлайн, можно поставить кнопку и обновлять по нажатию, так скрипт работать будет стабильнее, чем по триггеру при изменении любой ячейки.Kashimirush