2016-12-27 10 views
0

См. Предыдущее сообщение по этому вопросу; Auto Sort not working on Multiple Sheets within one Google SheetТребуется автосортировка на 3 листах, когда один заперт

Вот хороший сценарий с этой последней сессии;

function onEdit(event){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = event.source.getActiveSheet().getName() 
    var editedCell = event.range.getSheet().getActiveCell(); 
if(sheet=="Loan Inquiries"){ 
    var columnToSortBy = 2; 
    var tableRange = "A3:G99"; //range to be sorted 
    if(editedCell.getColumn() == columnToSortBy){ 
    var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort({ column : columnToSortBy, ascending: true }); 
    }} 
    else if(sheet=="Deals in Escrow"){ 
    var columnToSortBy = 7; 
    var tableRange = "A3:I99"; //range to be sorted 
    if(editedCell.getColumn() == columnToSortBy){ 
    var tableRange = "A3:I99"; //range to be sorted 
    var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort({ column : columnToSortBy, ascending: true }); 
    } 
    else{return} 
}} 

function test_onEdit() { 
    onEdit({ 
    user : Session.getActiveUser().getEmail(), 
    source : SpreadsheetApp.getActiveSpreadsheet(), 
    range : SpreadsheetApp.getActiveSpreadsheet().getActiveCell(), 
    value : SpreadsheetApp.getActiveSpreadsheet().getActiveCell().getValue(), 
    authMode : "LIMITED" 
    }); 
} 

Эта нить успешно решена на мой вопрос, однако, теперь, что я хочу сделать, это Автосортировка 3-й лист, который привязан к другим, но не себе. 3-й лист будет озаглавлен «Карлан-производство на 2017 год». Я также хочу, чтобы этот 3-й лист вытащил все новые данные из 2-го листа «Сделки в Escrow» и в том же форматировании, что и 2-й лист, и для автоматической сортировки, поскольку данные импортируются на 3-й лист, но также могут меня вводят новые предложения вручную также на 3-м листе и все еще могут автоматически обновляться.

ответ

0

Я считаю, что это будет делать то, что вы хотите:

function onEdit(event){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = event.source.getActiveSheet().getName() 
    var editedCell = event.range.getSheet().getActiveCell(); 
if(sheet=="Loan Inquiries"){ 
    var columnToSortBy = 2; 
    var tableRange = "A3:G99"; //range to be sorted 
    if(editedCell.getColumn() == columnToSortBy){ 
    var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort({ column : columnToSortBy, ascending: true }); 
    }} 
    else if(sheet=="Deals in Escrow"){ 
    var columnToSortBy = 7; 
    var tableRange = "A3:I99"; //range to be sorted 
    if(editedCell.getColumn() == columnToSortBy){ 
    var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort({ column : columnToSortBy, ascending: true }); 
    combineData() 
    }} 
    else if(sheet=="Karlan Production for 2017"){ 
    var columnToSortBy = 7; 
    if(editedCell.getColumn() == columnToSortBy){ 
    combineData() 
    }} 
    else{return} 
} 

function combineData(){ 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s=ss.getSheets()[1] 
var lr = s.getLastRow() 
var s1=ss.getSheets()[2] 
var lr1 = s1.getLastRow() 
var lc1=s1.getLastColumn() //get the last column of 'Karlan Production for 2017' 
var rng=s.getRange(3, 1, lr,lc1).getValues() //get 'Deals in Escrow' values 
var rng1=s1.getRange(3, 1, lr1,lc1).getValues() //get 'Karlan Production for 2017' values 
var rng2=[] 
var rng2=rng.concat(rng1) //combine 'Deals in Escrow' and 'Karlan Production for 2017' values (all rows) 
removeDuplicates(rng2) // call remove duplicates sending combined array 
} 

function removeDuplicates(data) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet() 
    var s1=ss.getSheets()[2] 
    var newData = new Array(); 
    for(i in data){ 
    var row = data[i]; 
    var duplicate = false; 
    for(j in newData){ 
     if(row.join() == newData[j].join()){ 
     duplicate = true; 
     } 
    } 
    if(!duplicate){ 
     newData.push(row);//create array of non duplicate rows 
    } 
    } 
    s1.clearContents(); //clear 'Karlan Production for 2017' 
    var sor=s1.getRange(3, 1, newData.length,  newData[0].length).setValues(newData); //set new array 
    sor.sort({ column : 7, ascending: true });//sort new data 
} 

После добавления нового листа, щелкните стрелку на вкладке листа. Нажмите «Защитить лист». В всплывающем окне введите описание и нажмите кнопку «Лист». Нажмите кнопку «Установить разрешения». В диапазоне редактирование разрешений всплывающее окно нажмите стрелку «Только вы». Выберите 'Custom' и добавьте адрес электронной почты вашего друга: для редактирования. Нажмите «Сделано».

+0

Вы, сэр, гений. Работает отлично. – user265519

+0

Извините! Я сказал, что он отлично работает, и на первый взгляд. Однако, вот в чем проблема. Первые 9 столбцов идентичны, но третий лист имеет еще 9 столбцов, идущих в R, и я могу добавить несколько позже. И когда любая информация вводится на 2-м листе, она немедленно дублирует эту запись на 3-м листе, но она удаляет весь столбец справа от I. – user265519

+0

Я ответил на ваш вопрос, как было задано. Пожалуйста, подтвердите это. Если у вас больше требований, задайте другой вопрос. Кроме того, покажите, что вы пытались решить вашу новую проблему. Это не сервис кодов. –