Google表格 - 我创建了一个明确的单元格功能,但它不起作用

时间:2018-01-10 06:47:32

标签: google-apps-script google-sheets

我想创建一个函数,当相应的单元格从“是”变为“否”时,该函数会自动清除一系列单元格。

我想触发此功能的范围是...... i5:i9,i13:i14,i18

如果此单元格包含'no',我希望清除的范围是n5:n9,n13:n14,n18

这两个单元都位于名为'Wax'的同一张纸上。

我编写了以下脚本并将其分配给工作表上的按钮,但是当我按下它时脚本运行并且单元格不会删除。

function clearautocraFields(e) {

  var triggerCell = SpreadsheetApp.getActive().getSheetByName('Wax').getSheetValues(9,5,13,1);

  if (triggerCell == 'No'){  

  var dataSheet = SpreadsheetApp.getActive().getSheetByName('Wax');
    sheet.getRange('n5:n9').clearcontent();
    sheet.getRange('n13:n14').clearcontent();
    sheet.getRange('n18').clearcontent();
    }

}

请帮忙。

谢谢,

1 个答案:

答案 0 :(得分:0)

这些修改怎么样?

修改要点:

  • getSheetValues(9,5,13,1)的范围是“e9:e21”。
    • 首先,检索“i5:i18”的值,然后删除不必要的值。
  • getSheetValues(9,5,13,1)检索的数据是二维数组。
    • getValues()检索的数据也是二维数组。
    • 使用toString()将二维数组转换为字符串,并按indexOf()
    • 搜索
  • 请将clearcontent()修改为clearContent()
  • 您可以使用var sheet = SpreadsheetApp.getActive().getSheetByName('Wax')

修改后的脚本:

function clearautocraFields() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Wax');
  var triggerCell = sheet.getRange('i5:i18').getValues();
  triggerCell.splice(5, 3);
  triggerCell.splice(7, 3);
  if (triggerCell.toString().indexOf('No') != -1) {
    sheet.getRange('n5:n9').clearContent();
    sheet.getRange('n13:n14').clearContent();
    sheet.getRange('n18').clearContent();
  }
}

参考文献:

如果我误解了你的问题,请告诉我。我想修改。

编辑:

在此示例脚本中,当在“i5:i9,i13:i14,i18”范围内找到No时,将清除具有相同行的列“n”的值。

function clearautocraFields() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1');
  var triggerCell = sheet.getRange('i5:i18').getValues();
  for (var i=0; i<triggerCell.length; i++) {
    var index = i + 5;
    triggerCell[i][1] = "n" + index;
  }
  triggerCell.splice(5, 3);
  triggerCell.splice(7, 3);
  for (var i in triggerCell) {
    if (triggerCell[i][0] == 'No') {
      sheet.getRange(triggerCell[i][1]).clearContent();
    }
  }
}