Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >google应用程序根据从属下拉列表粘贴行的脚本

google应用程序根据从属下拉列表粘贴行的脚本
EN

Stack Overflow用户
提问于 2021-02-04 20:47:07
回答 1查看 188关注 0票数 0

Copy of the sheet I've created.我对dependent下拉列表的功能很满意,但是我的目标是从"materials“表(列B:I)中复制行中的所有数据,这些数据对应于从"crop_specific”表的E列的dependent下拉列表中选择的选项,将此信息复制到E:L列。我希望保留当前脚本的功能,如果从D列的选择发生更改,则清除E列中的内容,将其扩展到整个行。任何帮助都将不胜感激。该脚本的代码如下。

代码语言:javascript
运行
AI代码解释
复制
    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);
}
EN

回答 1

Stack Overflow用户

发布于 2021-02-04 22:15:48

解释:

  • 您可以添加一些代码,以便根据下拉选择从materials工作表中提取数据。

  • 删除列A,因为您要从materials工作表中将B复制到I。

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

我对crop_specific表有一些担忧:

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

  • 列E包含一个下拉菜单,具体取决于列D的值。您可能希望拖动该下拉菜单,以便将其应用于列E中的其他单元格。

解决方案:

代码语言:javascript
运行
AI代码解释
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66053565

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档