繁体   English   中英

Google工作表的脚本,用于基于另一个单元格值(在列范围内)更改单元格值

[英]Script for Google sheet to change a cells value based on another cells value (in a column range)

情况如下:我的Googlesheet中的E列有一个Yes和No下拉列表。每次用户回答No时,我都希望G列中的相应单元格带有“不适用”字样。 但是,如果用户回答“是”,我希望G中的该单元格具有另一个“是”和“否”下拉列表。

我试图建立在从该线程获得的脚本的基础上: Google表格公式可基于另一个单元格值更改单元格值

它几乎是完美的,但我无法使其适用于某个范围(最好是整列)。 任何意见,将不胜感激 :)

由于尝试自行调整并没有取得任何成功,因此以下是上述线程的复制代码:

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var s=ss.getActiveSheet()
  var nota=e.range.getA1Notation()
  if(nota=="E10"){
  var val=e.range.getValue()
    if(val=="Levy"){
      s.getRange("E11").setDataValidation(null)
      s.getRange("E11").setValue("Monthly")
  }
      else{
  s.getRange('E11').clearContent()      
  var cell = s.getRange('E11');
  var rule = SpreadsheetApp.newDataValidation().requireValueInList(['Triannual', 'Quarterly']).build();
  cell.setDataValidation(rule);
   }}}

这是我的愚蠢尝试:

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var s=ss.getActiveSheet()
  var nota=e.range.getA1Notation()
  if(nota=="E2:E500"){
  var val=e.range.getValue()
    if(val=="No"){
      s.getRange("G2:G500").setDataValidation(null)
      s.getRange("G2:G500").setValue("Not Applicable")
  }
      else{
        s.getRange('G2:G500').clearContent()      
        var cell = s.getRange('G2:G500');
  var rule = SpreadsheetApp.newDataValidation().requireValueInList(['Yes','No']).build();
  cell.setDataValidation(rule);
   }}}

您需要循环一定范围的单元格,这就是原始脚本无法正常工作的原因。 .getValue()返回单个单元格,您不能有范围(如在编辑的脚本中一样)。

该脚本将查看整个页面并每次循环。 这是可取的,因为您不必按顺序保留数据。 换句话说,您可以在E列周围跳转,并在出现时将其标记为“是”或“否”。 空白单元格将被忽略。

  function addValidation() {

  // Get the spreadsheet and active sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  // Get the data as an Array you can iterate and manipulate
  var data = sheet.getDataRange().getValues();

  // Store a rule to use for the Data Validation to be added if ColE == "Yes"
  var rule = SpreadsheetApp.newDataValidation().requireValueInList(["Yes", "No"]).build();

  // Loop the sheet
  for(var i=0; i<data.length; i++) {

    // Test ColE. Note that the array is 0-indexed, so A=0, B=2, etc...
    // To change which columns you're testing, change the second value.
    if(data[i][4] == "Yes") {

      // If it's "Yes," add the Data Validation rule to Col G for that row.
      // Note that .getRange() is _not_ 0 indexed, which is why you need `i+1` to get the correct row

      sheet.getRange(i+1, 7).clear().setDataValidation(rule);

      // If ColE == "No," mark ColG as "Not Applicable"
    } else if(data[i][4] == "No") {
      sheet.getRange(i+1, 7).clearDataValidations().setValue("Not Applicable");
    }
  }
}

另请注意,这将在更改Col E时更改值。因此,如果将“是”更改为“否”,则Col G将更改为“不适用”。

 for (var i = 0; i < 5000; i++) {
function checkData() {
      if(SpreadsheetApp.getActiveSheet().getRange("E" + i).getValue() == "No"){
          SpreadsheetApp.getActiveSheet().getRange("G" + i).setValue('Not Applicable');
      }
      else{
    SpreadsheetApp.getActiveSheet().getRange("G" + i).setValue('Applicable');
        }
    }
}

希望这对您有用:)顺便说一句,获得5000行的范围将非常慢! 这是您可以更快地完成操作的另一种方法!

var ss = SpreadsheetApp.getActiveSpreadsheet();
  var tsSheet = ss.getSheetByName("YOUR SHEET NAME AT THE BOTTOM OF THE PAGE");
  var tsRows = parseInt(tsSheet.getLastRow());

     for (var i = 0; i < tsRows; i++) {
    function checkData() {
          if(SpreadsheetApp.getActiveSheet().getRange("E" + i).getValue() == "No"){
              SpreadsheetApp.getActiveSheet().getRange("G" + i).setValue('Not Applicable');
          }
          else{
        SpreadsheetApp.getActiveSheet().getRange("G" + i).setValue('Applicable');
            }
        }
    }

编辑:

var ss = SpreadsheetApp.getActiveSpreadsheet();
  var tsSheet = ss.getSheetByName("YOUR SHEET NAME AT THE BOTTOM OF THE PAGE");
  var tsRows = parseInt(tsSheet.getLastRow());

     for (var i = 0; i < tsRows + 1; i++) {
    function checkData() {
          if(SpreadsheetApp.getActiveSheet().getRange("E" + i).getValue() == "No"){
              SpreadsheetApp.getActiveSheet().getRange("G" + i).setValue('Not Applicable');
          }
          else{
        SpreadsheetApp.getActiveSheet().getRange("G" + i).setValue('Applicable');
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM