我正在尝试更改此脚本以搜索日期(现在)并为工作表中的找到日期着色。
原始脚本;
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)];
}
}
}
答案 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一样,我对你比较日期的方式有些担忧。但如果它对你有用,那就太好了。