2015-10-10 2 views
1

Я ищу кнопку, чтобы запустить скрипт в Листе Google. Когда кнопка нажата, я хотел бы, чтобы столбец заполнялся «Утвержденным» для данной строки на основе зарегистрированного пользователя и электронного адреса, указанного в строке.Заполните столбец на основе данных строки

Например, в столбце A есть список разных адресов электронной почты. Нажмите кнопку, а столбец B заполнен «Утвержденный», если ваш адрес электронной почты для входа совпадает с тем, что находится в столбце A. В идеале он может искать и убедиться, что запись в столбце B еще не заполнена «Отклонено». Подумайте о супервизоре, проходящем через список, и вместо использования выпадающего списка для «Approved» в каждой строке, они могут нажать кнопку, и он одобрит все записи, к которым прикреплена их электронная почта.

У меня он работает, но он медленный и неэффективный, поскольку он проходит через каждую строку, оценивает, а затем заполняет соответствующий столбец. Он также не устанавливает разрешение для последней строки данных. Он проходит через каждую строку, заполняет, но не заполняет «Утвержденный» в последней строке введенных данных.

Я хотел бы выяснить, как это сделать с помощью массива, чтобы сделать его более эффективным.

Вот то, что я до сих пор:

function supervisorApproval(){ 
//This function will approve all of the peole in the respected supervisors section 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("AS"); 

var approverLogin = Session.getActiveUser().getEmail(); 
var ui = SpreadsheetApp.getUi(); 

//Calculate which row is the last row (last entry) 
var column = sheet.getRange('W:W'); 
var values = column.getValues(); 
var lastrow = 1; 

//this is inefficient code, doesn't write "approved" for last row of data 
while (values[lastrow][0] != ""){ 
var supEmail = sheet.getRange(lastrow, 23).getValue(); 
var approvalCell = sheet.getRange(lastrow, 27); 

if (approverLogin == supEmail){ 
    approvalCell.setValue("Approved"); 
} 

lastrow++; 
} 

} 

ответ

0

Это должно быть намного быстрее, если вы читать и записывать значения в таблицу только один раз. Попробуй это.

function supervisorApproval() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("AS"); 

    var approverLogin = Session.getActiveUser().getEmail(); 
    var ui = SpreadsheetApp.getUi(); 

    var range = sheet.getRange(1, 23, sheet.getLastRow(), 5); 
    var values = range.getValues(); 
    for(var i = 0; i < values.length; i++) { 
    var row = values[i]; 
    var supEmail = row[0]; 
    if (approverLogin === supEmail){ 
     row[4] = "Approved"; 
    } 
    } 
    range.setValues(values); 
} 
+0

Это сработало отлично! Благодаря SpiderPig –

Смежные вопросы