使用今天的函数我今天的日期在单元格C4中。要查询的数据范围是G4:af250。
我的脚本是:
onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dates = sheet.getRange(G4:AF250).getValues();
var today = C4();
}
Goto 'today'() }
}`
我在收到错误后收到错误,而不是去今天日期范围内的单元格。
帮助。
答案 0 :(得分:0)
您开始掌握JavaScript的语法,所以请继续。也许尝试在CodeAcademy的学习路径上努力,帮助锤击它。
function onOpen() {
var sheet = SpreadsheetApp.getActiveSheet();
var dateRange = sheet.getRange('G4:AF250');
var dates = dateRange.getValues();
var today = sheet.getRange('C4').getValue();
// Find today in the dateRange
var found = false;
var row=dates.length-1;
while (row >= 0 && !found) {
var col=dates[row].length-1;
while (col>=0 && !found) {
// If the array cell matches 'today', stop looking.
if (!(today > dates[row][col]) && !(today < dates[row][col])) {
found = true;
break;
}
col--;
}
if (!found)
row--;
}
// Use search row & col to offset to a cell relative to dateRange start
var active = dateRange.offset(row, col,1,1);
// Move user's cursor to today's date, if it is found in dateRange
if (found)
sheet.setActiveRange(active);
}
编辑:一些关键点的说明。
此功能会在G4:AF250
范围内搜索与C4
内容的匹配项。预计该单元格的内容为=TODAY()
。如果该假设是正确的,那么结果应该是用户的光标将被放置在匹配的单元格中,如果它存在。如果未找到匹配项,则光标将保留在它开始的位置(A1)。
日期匹配很棘手。您不能只测试相等性,因此此代码测试today
是否在目标单元格中的日期之前或之后;如果它不是之前或之后,那么它必须是相同的。 (还有其他方法,请参阅Compare two dates with JavaScript。)
此处不包含任何测试,以确保从电子表格中读取的值实际上是Date对象。如果您在C4或dateRange中有字符串或数字,则不会进行匹配。例如,日期1/4/2014
不等于字符串"1/4/2014"
。
要测试匹配项,我们的代码必须遍历dateRange
的两个维度。我们可以使用for
循环从0开始执行此操作。但是,在这种情况下,我们从最大值开始并重新开始工作。这个选择对于active
单元格的定义很方便,稍后。
与往常一样,在处理Spreadsheets时,您需要注意Spreadsheet行和列引用从1开始,而Javascript数组从0开始。这意味着一旦我们使用getValues()
读取一系列值,我们有一个0..(maxRows-1)
的{{1}}二维数组。如果删除0..(maxCols-1)
,则最终会尝试引用不存在的值,并生成错误。