迭代数组并突出显示数据为[Google Sheet script]的行

时间:2017-07-01 21:17:44

标签: javascript google-docs

正在寻找帮助解决我的脚本问题的人。

我试图编写一个请求用户输入的脚本,遍历搜索输入的数据集,并突出显示相应行中的所有单元格。

我很欣赏这是一个相当基本的请求,但是已经浏览了Stackoverflow /更广泛的网络几个小时并且针对不同问题实施解决方案无济于事,有人可以帮我修复我的代码。

示例:

鉴于此样本数据。如果用户输入" C"然后第3行(C,5,8)中的所有单元格将突出显示为红色

  1. A 3 6
  2. B 5 8
  3. C 5 8
  4. D 8 4
  5. 我们希望用户输入" C"并且第3行的所有相应活动单元格的背景都变为红色。

    非常感谢任何帮助。

    
    
    function HighlightMyTablet() {
      // Scan data in sheet. 
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var row = ss.getActiveRange().getRowIndex();
      var range = ss.getDataRange();
      var values = range.getValues();
      
      // Prompt user for input. 
      var ui = SpreadsheetApp.getUi();
      var response = ui.prompt('What\'s the tablet of the month?', ui.ButtonSet.OK_CANCEL);
      
      // Iterate through rows. If data matches input then highlight yellow.
      if (response.getSelectedButton() == ui.Button.OK) {
        for (i=0; i<values.length; i++) {
          if(values[i][0] == response) {
            values[i][0].setBackground("red");
          }
        }  
      } 
    }
    &#13;
    &#13;
    &#13;

1 个答案:

答案 0 :(得分:0)

我同意评论者所说的内容,你需要确保你真的想要===而不是.match(new RegExp(user_input, 'i'))更好的陈述。但除此之外你的错误是:你需要从响应中获取字符串。您正在获取响应对象。这是这样做的:response.getResponseText()。其次,您需要设置范围的颜色,而不是数据本身的颜色。您可以在下面看到我如何更新这两件事。

function HighlightMyTablet() {
  // Scan data in sheet. 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var row = ss.getActiveRange().getRowIndex();
  var range = ss.getDataRange();
  var values = range.getValues();

  // Prompt user for input. 
  var ui = SpreadsheetApp.getUi();
  var response = ui.prompt('What\'s the tablet of the month?', ui.ButtonSet.OK_CANCEL);

  // Iterate through rows. If data matches input then highlight yellow.
  if (response.getSelectedButton() == ui.Button.OK) {
    for (i=0; i<values.length; i++) {
      if(values[i][0] == response.getResponseText()) {
        ss.getRange('A'+ (i+1)).setBackground('red');
      }
    }  
  } 
}