Google sheets 当一张被锁定时,需要在3张纸上自动排序
请看前面关于这个问题的帖子; 这是上节课的好剧本Google sheets 当一张被锁定时,需要在3张纸上自动排序,google-sheets,spreadsheet,Google Sheets,Spreadsheet,请看前面关于这个问题的帖子; 这是上节课的好剧本 function onEdit(event){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = event.source.getActiveSheet().getName() var editedCell = event.range.getSheet().getActiveCell(); if(sheet=="Loan Inquiries"){ var co
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"
});
}
这个线程成功地解决了我的问题,但是,现在我想做的是自动排序第三张,这是锁定到其他人,但不是我自己。第三页标题为“2017年卡兰生产”。我还希望这第三张表格能够从第二张表格“代管交易”中提取所有新数据,格式与第二张表格相同,并在数据导入第三张表格时自动排序,但也能够在第三张表格中手动输入新交易,并且仍然能够自动更新 我相信这会满足你的要求:
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
}
添加新图纸后,单击“图纸”选项卡上的箭头。
单击“保护工作表”。在弹出窗口中,输入说明并单击
“工作表”按钮。单击设置权限按钮。在范围内
编辑权限弹出窗口单击箭头“仅限您”。挑选
“自定义”并添加您想要的其他人的电子邮件地址
以便能够编辑工作表。单击完成 先生,你是个天才。很好用,对不起!我说它工作得很好,乍一看确实如此。然而,问题出在这里。前9列是相同的,但第3页有一个额外的9列去R,我可能会添加一些以后。当在第二张纸上输入任何信息时,它会立即将该条目复制到第三张纸上,但它会删除I右侧的所有列。我回答了你的问题。请批准。如果你有更多的要求,问另一个问题。同时,展示你试图解决新问题的方法。这不是代码服务。请理解。然而,这超出了我的能力来解决。我只是个代码修补者。如果你能帮忙,我甚至愿意付钱。我更新了答案以满足你的新要求。享受。