#google-apps-script #google-sheets
Вопрос:
Я попытался ввести 2 значения в 1 функцию. Я могу ввести первый без проблем, второй вводится на основе первого значения, поэтому, поскольку оба они находятся в одной и той же функции, второй не может быть введен. Я попытался использовать flush()
метод после того, как ввел первое значение, но второе значение все еще не может найти первое значение. Вот мой код :
function addItem(e){ var sheet = ss.getSheetByName('items'); var id = e.parameter.id; var qty = e.parameter.qty; var lc = sheet.getLastColumn(); var lr = sheet.getLastRow(); var data = sheet.getDataRange().getValues(); var old_date = data.pop()[0]; var new_date = e.parameter.date; if (old_date != new_date) sheet.appendRow([new_date]); SpreadsheetApp.flush(); for (var i = 1; i lt;= lc; i ) { for (var j = 1; j lt;= lr; j ) { var rid = sheet.getRange(1, i).getValue(); var red = sheet.getRange(j,1).getValue(); if (rid == id amp;amp; red == new_date){ sheet.getRange(j, i).setValue(qty); }}}}
Моя цель состоит в том , чтобы добавить строку new_date
с помощью pop()[0]
и appendRow
, дождавшись ввода данных с помощью SpreadsheetApp.flush()
, получить диапазон и значение new_date
и id
с шагом, проверяющим все строки и столбец, чтобы я мог вводить qty
данные на основе id
столбца и new_date
строки.
как вы можете видеть на рисунке, new_date
11/11/1111 находится в (строка 3, столбец 1), в то id
время как 1 находится в (строка 1, столбец 2), и мне нужно ввести qty
(строка 3 и столбец 2). проблема, с которой я сталкиваюсь, заключается в том, что при запуске кода он не может обнаружить new_date
то, что просто вводится, поэтому qty
его нельзя вводить, потому что он думает, что new_date
его там нет.
Комментарии:
1. Мне нужно было бы увидеть изображение листа, чтобы помочь вам.
2. @Cooper Я отредактировал его
3. Я не понимаю изображения, где хранится идентификатор?
4. @Copper
id
просто проверяется, не вводится, единственное, что вводится, — это простоdate
иqty
. поэтому для вводаqty
мне нужно проверить, правильноid
этоdate
или нет.5. Я думаю, что одна вещь заключается в том, что вы не можете сравнивать объекты даты, вы можете сравнивать только новую дату().valueOf() или новую дату().getTime(). Оба возвращают миллисекунды и могут быть сопоставлены численно. На данный момент я все еще не могу понять, чего вы пытаетесь достичь.
Ответ №1:
Я просто разделяю функцию, и она отлично работает.
function addDate(e){ var sheet = ss.getSheetByName('items'); var data = sheet.getDataRange().getValues(); var old_date = data.pop()[0]; var new_date = e.parameter.date; if (old_date != new_date) sheet.appendRow([new_date]); } function addItem(e){ var sheet = ss.getSheetByName('items'); var sku = e.parameter.sku; var qty = e.parameter.qty; var date = e.parameter.date; var lc = sheet.getLastColumn(); var lr = sheet.getLastRow(); SpreadsheetApp.flush(); for (var i = 1; i lt;= lc; i ) { for (var j = 1; j lt;= lr; j ) { var rid = sheet.getRange(1, i).getValue(); var red = sheet.getRange(j,1).getValue(); if (rid == sku amp;amp; red == date){ sheet.getRange(j, i).setValue(qty); var result = "Input Succeed"; } } } }