在表格中找出日期并给它上色

Find date in sheet and color it

本文关键字:日期 表格      更新时间:2023-09-26

我试图改变这个脚本搜索日期(现在)和颜色在工作表中找到的日期。

原始脚本;

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)];
      }
    }
  }

看起来你在理解javascript对象和它们的方法时犯了一些简单的错误。(Google apps-script, GAS,是javascript的衍生物,所以任何可以帮助你学习基本javascript的资源都可以在这里提高你的技能。)

Range是类Range的对象,而电子表格中范围的a1Notation表达式(例如:"A1"或"A:Z")是String类的对象。现在,String具有一些属性和方法,这些属性和方法对于执行您可能希望对文本字符串执行的操作非常有用。另一方面,Range对象有不同的属性和适合它的方法——它们在这里有文档说明。要使它们在脚本中的变量对象上工作,该变量必须属于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,我对你比较日期的方式有些担心。但如果它适合你,那就太好了。