当前位置: 首页 > 知识库问答 >
问题:

想要自动排序3张,当其中一张被锁定

钱宇
2023-03-14

请看前面关于这个问题的帖子;自动排序不能在一个Google工作表中的多个工作表上工作

这是上节课的好剧本;

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年卡兰生产”。我还希望这第三张表格能够从第二张表格“代管交易”中提取所有新数据,格式与第二张表格相同,并在数据导入第三张表格时自动排序,但也能够在第三张表格中手动输入新交易,并且仍然能够自动更新。

共有1个答案

庄飞
2023-03-14

我相信这会满足你的要求:

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
}

添加新工作表后,单击工作表选项卡上的箭头。单击[保护工作表]。在弹出窗口中,输入描述并单击工作表按钮。单击设置权限按钮。在范围编辑权限弹出窗口中单击只有你的箭头。选择“自定义”,并添加您希望能够编辑工作表的另一个人的电子邮件地址。点击完成。

 类似资料:
  • 我正在运行一个包含多张表的电子表格,在Sheet3中输入一些数据并运行一个自动排序代码,该代码按D列升序排序。 表3示例|表1示例 Sheet1中的“名称”和“位置”是从Sheet3导入的,因此当Sheet3进行排序时,它们会交换位置,但是,问题是从D到F(Sheet1)的信息没有交换,它将为错误的人显示。 这是我正在使用的脚本: 对其进行了轻微修改,以适用于特定的工作表,因为我当时不需要对整个文

  • 按照element的 :default-sort = "{prop: 'date', order: 'descending'}",我通过过滤数组,得到需要排序的prop,但是效果没有实现。

  • 问题内容: 根据我如何断言一个元素是集中的?线程,您可以通过切换到来检查元素是否聚焦,并断言这与您期望获得焦点的元素相同: 就我而言,当前关注的 元素没有attribute。 我应该怎么做而不要检查? 额外的问题:另外,从我的解决方案尝试中可以看出,我似乎无法期望/断言一个元素(或Web元素)作为一个完整的对象。为什么? 我试过了: 但是失败并出现一个我什至无法理解的错误-存在巨大的回溯(在控制台

  • 使用GoogleApps脚本,我试图用一张工作表中的数据自动填充多张工作表。 我使用两个电子表格,“主”电子表格包含需要自动填充到另一个电子表格中的数据。 另一个电子表格包含模板表,根据“主”表中的条目数量,模板表被重复多次,这是数据需要去的地方。 到目前为止,我已经设法复制了基于主模板的工作表的数量,并在之后删除它们(见代码),但是我找不到任何关于如何自动填充这些工作表的信息。模板根据列中的公司

  • 问题内容: 我有这个程序,您可以在其中下载文件,我希望将JFileChooser锁定到一个文件夹(目录),以便用户无法浏览其他任何文件。他只能从例如文件夹“ C:\ Users \ Thomas \ Dropbox \ Prosjekt RMI \ SERVER \”中选择文件。我已经尝试过搜索,但没有找到任何东西。我的代码是: 这工作正常,但是现在我可以转到文件夹Project RMI,我不想这

  • 问题内容: 我有几个映像(第3方),例如,设置mysql,设置通用的php应用程序环境,设置第3方工具。 我想制作一个Dockerfile / Docker映像,将两个映像合并,然后运行更多命令 问题答案: 您可以将它们链接起来。你可以在这里找到更多 https://github.com/docker/docker/issues/3378#issuecomment-31314906 摘自上面的链接