在工作表中查找日期并为其着色

时间:2013-04-12 14:52:54

标签: javascript google-apps-script

我正在尝试更改此脚本以搜索日期(现在)并为工作表中的找到日期着色。

原始脚本;

function findThis(val) {
var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
var searchStr = "Foo";
Logger.log(res);
var res = findValue(data, searchStr);
if (res != null) {
Browser.msgBox("Found in row " + res[0] + ", column " + res[1]);
}
}

function findValue(data, obj) {
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
  if (data[i][j] == obj) {
    return [i, j];
  }
}
}
return null;

}

我的试错脚本;

我认为范围在res中,但是当我想getRange它不接受res坐标时,我尝试了getA1Notation() 我做错了,但是学习和尝试,也许你可以提供帮助。

    function findThis(val) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // toevoeging
  var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  var Today = new Date();
  var date = Utilities.formatDate(Today,"GMT+100","dd-M-yyyy");
  Logger.log(date)
  var searchStr = date;

  var res = findValue (data, searchStr);
  if (res != null) {
  Logger.log(res);
    Logger.log(res[0]+", "+res[1]);
    var Range = (res[0]+", "+res[1]);
    var x = (res[0]+", "+res[1]);
    //var C = range.getColumnIndex(res);
    var range = Range.getA1Notation()
    Logger.log(range); 
    var value = sheet.getRange([x]).getValue(); //toegevoegd
    Logger.log(value);
    Logger.log(x);    
    sheet.getRange(x).setBackgroundColor('Yellow'); 
    Browser.msgBox("Found in row " + res[0] + ", column " + res[1]);
  }
}

function findValue(data, obj) {
  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[i].length; j++) {
      if (data[i][j] == obj) {
        return [(i+1), (j+1)];
      }
    }
  }

1 个答案:

答案 0 :(得分:0)

看起来你在理解javascript对象及其方法时犯了一些简单的错误。 (Google应用程序脚本,GAS,是javascript的衍生产品,因此任何可以帮助您学习基本JavaScript的资源都可以提高您的技能。)

范围是类范围的对象,而电子表格中范围的a1Notation表达式(例如“A1”或“A:Z”)是类字符串的对象。现在,String具有可用于执行您可能想要对文本字符串执行的操作的属性和方法。另一方面,Range对象具有适合它的不同属性和方法 - 它们被记录为here。要让他们在脚本中处理变量 object ,该变量必须是Class Range。让我们看看代码中的这一行:

var Range = (res[0]+", "+res[1]);

该行创建一个名为Range的变量,该变量是一个包含"15, 16"之类的字符串。然后,当您尝试Range.getA1Notation()时,它会失败,因为字符串没有该方法。您需要做的是使用实际的Range对象。这是一种适合您的方法,只需替换当前脚本中的相应块:

if (res !== null) {
  var range = sheet.getRange(res[0],res[1]);
  range.setBackgroundColor('Yellow'); 
  Browser.msgBox("Found at " + range.getA1Notation());
}

您的示例中的任何内容都不需要变量value,但如果您这样做,则可以获得它。

  var value = range.getValue(); //toegevoegd
  Logger.log(value);

就像@Sergeinsas一样,我对你比较日期的方式有些担忧。但如果它对你有用,那就太好了。