Я очень плохо знаком с JavaScript, так что терпите меня.Я хочу уравнение, которое ищет несколько столбцов для указанных значений, а не одно и то же значение во всех столбцах.Например: ColA = Джеймс, ColB = Смит, ColE = "" (cellisempty) верно?Как только он находит первую строку с этими критериями, он получает эту строку для использования в другом уравнении, которое будет setValue(ColE + gotRow, new Date())
Я делаю Лист времени / времени, если вам интересно.Идея заключается в том, что функция ищет имя человека и следующее доступное место для размещения времени, поскольку один и тот же человек мог выходить из системы и несколько раз на одном листе.Как только у него есть строка с пустым местом, он помещает ее в текущее время в эту строку, что делает ее больше не пустой, то есть при следующем запуске функции она пропустит эту строку и перейдет к следующей, из которой парень вышел из системы.
вот функция, которую мне дали для решения моей проблемы благодаря одному из пользователей.
function getValue(cellName) {
return SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).getValue()
}
function setValue(cellName, value) {
SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).setValue(value);
}
function rowWhereTwoColumnsEqual(value1,col1,value2,col2) {
var value1=value1;//testing
var value2=value2;
var col1=col1;//testing
var col2=col2;//testing
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getDataRange();
var vA=rg.getValues();
var rA=[];
for(var i=0;i<vA.length;i++) {
if(vA[i][col1-1]==value1 && vA[i][col2-1]==value2) {
rA.push(i+1);
}
}
Logger.log(rA.push(i+1))
SpreadsheetApp.getUi().alert(rA.join(','));
}
Я создал функцию под ней, просто для ввода значений, чтобы увидеть, как она работает
function getrowWhereTwoColumnsEqual(){
rowWhereTwoColumnsEqual('James','Sheet1!A',null,'Sheet1!C')
Logger.log(rowWhereTwoColumnsEqual('Ta','Sheet1!A',null,'Sheet1!C'))
}
Изготовленный мной лист имеет 'James'
в A1, а C1 пуст.У этого также есть 5 других рядов, полных случайных имен.
Column A | Column B | Column C
=================================
James | C |
Kyle | E |
Micheal | T |
Sarah | K |
Tray | F |
John | D |
Так что я ожидал получить ответ «1», потому что строка 1 должна быть истинной для обоих, но вместо этого я увидел «7».Возможно, потому что строка 7 пуста во всех столбцах, поэтому все столбцы равны.Поэтому я должен был ввести неправильные значения, иначе уравнение нуждается в корректировке.Как я уже сказал, я очень новый.Изменить 9/9/19 20:06 Еще раз спасибо Купер.Ваша функция работает довольно хорошо.
function test() {
findRows(1,getValue('A1'),2,getValue('B1'),3,null,'Sheet1')
Logger.log(findRows(1,getValue('A1'),2,getValue('B1'),3,null,'Sheet1'));
}
Однако, как только я добавил значения в C1, logger.log вышел []
Column A | Column B | Column C
=================================
James | C | 5/9/19
Kyle | E |
James | T |
Sarah | K |
James | F |
John | D |
без значения, я получил [1.0,3.0, 5.0], но как только я изменил полученное значение, [] ожидал [3.0,5.0]
Редактировать 9:00 по тихоокеанскому времени. Я изменил ноль на ""
, и, похоже, он работает.
Редактировать 9:25 PST Функция конечных уравнений Test () - это тот, который был готовым продуктом и успешно завершен.
function getValue(cellName) {
return SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).getValue()
}
function getValues(cellName) {
return SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).getValues()
}
function setValue(cellName, value) {
SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).setValue(value);
}
function findRows(c1,n1,c2,n2,c3,n3,name) {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName(name);
var rg=sh.getDataRange();
var vA=rg.getValues();
var rA=[];
for(var i=0;i<vA.length;i++) {
if(vA[i][c1-1]==n1 && vA[i][c2-1]==n2 && vA[i][c3-1]==n3) {
rA.push(i+1);
}
}
return rA
}
function test() {
var passiveRow = findRows(1,getValue('A2'),2,getValue('B2'),3,"",'Sheet1');
Logger.log(passiveRow);
setValue('C' + passiveRow, new Date().toLocaleString());
}
Чтобы "" работал, строка 1 должна иметь заголовок.Это работает, только если есть только 1 результат, который должен быть в конце.он находит имя и пустое место, чтобы поставить дату.