【问题标题】:google apps script to paste row based on dependent drop down list谷歌应用脚​​本根据依赖下拉列表粘贴行
【发布时间】:2021-02-04 20:47:07
【问题描述】:

我创建了一个 google 表格,其中包含基于 this tutorial 的相关下拉列表。 Copy of the sheet I've created. 我对依赖下拉列表的功能感到满意,但是我的目标是从“材料”表(B:I 列)中连续复制与从依赖中选择的选项相对应的所有数据“crop_specific”表的 E 列中的下拉列表,将此信息复制到 E:L 列。如果更改了 D 列的选择,我想保留当前脚本的功能,即清除 E 列中的内容,并将其扩展到整行。任何帮助将非常感激。脚本代码如下。

    var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("crop_specific");
var wsMaterials = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("materials");
var options = wsMaterials.getRange(2,1,wsMaterials.getLastRow()-1,9).getValues();

function onEdit(e){
  var activeCell = e.range;
  var val = activeCell.getValue();
  var r = activeCell.getRow();
  var c = activeCell.getColumn();
  var wsName = activeCell.getSheet().getName();
  if(wsName == "crop_specific" && c === 4 && r>1){
    if(val === ""){
      ws.getRange(r,5).clearContent();
      ws.getRange(r,5).clearDataValidations();
    }else {
    ws.getRange(r,5).clearContent();
    var filteredOptions = options.filter(function(o){ return o[0] ===val });
    var listToApply = filteredOptions.map(function(o){return o[1] });
    var cell = ws.getRange(r,5);
    applyValidationToCell(listToApply,cell);
    }
  }
}

function applyValidationToCell(list,cell){
  
  var rule = SpreadsheetApp
    .newDataValidation()
    .requireValueInList(list)
    .setAllowInvalid(false)
    .build();

  cell.setDataValidation(rule);
}

【问题讨论】:

    标签: google-apps-script google-sheets drop-down-menu dependencies


    【解决方案1】:

    解释:

    • 您可以根据下拉选择将一些代码添加到filter materials 表中的数据。

    • 删除列 A,因为您想从 materials 表中从 B 复制到 I。

    • 将值复制到 crop_specific 工作表中的 E 到 L 范围内。

    我对@9​​87654325@ 工作表有一些顾虑:

    • 数据从编辑的行开始粘贴在 E-L 范围内。所以我假设您要清除该范围内的先前内容,否则新值将覆盖该范围的一部分。

    • E 列包含一个下拉菜单,具体取决于 D 列的值。也许您想下拉该下拉菜单,以便将其应用于 E 列中的其他单元格。

    解决办法:

    var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("crop_specific");
    var wsMaterials = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("materials");
    var options = wsMaterials.getRange(2,1,wsMaterials.getLastRow()-1,9).getValues();
    
    function onEdit(e){
      var activeCell = e.range;
      var val = activeCell.getValue();
      var r = activeCell.getRow();
      var c = activeCell.getColumn();
      var wsName = activeCell.getSheet().getName();
      if(wsName == "crop_specific" && c === 4 && r>1){
        if(val === ""){
          ws.getRange(r,5).clearContent();
          ws.getRange(r,5).clearDataValidations();
        }else {
        ws.getRange(r,5).clearContent();
        var filteredOptions = options.filter(function(o){ return o[0] ===val });
        var listToApply = filteredOptions.map(function(o){return o[1] });
        var cell = ws.getRange(r,5);
        applyValidationToCell(listToApply,cell);
      
        var matData = wsMaterials.getDataRange().getValues().filter(r=>r[0]===val); // new code
        matData.forEach(a => a.splice(0, 1)); // new code
        ws.getRange("E2:L" + ws.getLastRow()).clearContent(); // new code
        ws.getRange(r,5,matData.length,matData[0].length).setValues(matData); // new code
        
        }
      }
    }
    
    function applyValidationToCell(list,cell){
      
      var rule = SpreadsheetApp
        .newDataValidation()
        .requireValueInList(list)
        .setAllowInvalid(false)
        .build();
    
      cell.setDataValidation(rule);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多