Google App脚本可在多个表格中查找日期

时间:2016-11-25 11:43:34

标签: google-apps-script

我有一个包含许多工作表的电子表格,每张工作表代表一个月,并且在B列中有日期。我正在尝试创建一个搜索当前日期并在C列中插入当前时间的函数。通过指定工作表有一个功能,但我希望它能找到工作表本身。

我有以下代码:

function insertTime() {
var date = new Date();

var hours = date.getHours()
var minutes =  date.getMinutes()
var timeStamp = hours + ':' + minutes



var ss = SpreadsheetApp.getActiveSpreadsheet()//// get the sheet
var sheets = ss.getSheets();// get all the sheets
var today = new Date(); //get todays date

for (var sheetNum = 1; sheetNum < sheets.length; sheetNum++){
 var sheet = ss.getSheets()[sheetNum]
 var columnB = sheet.getRange(2, 2, sheet.getLastRow()-1, 1); // get all the rows
 var bValues = columnB.getValues(); // get the values
 for (var i = 0; i < bValues.length; i++) { // repeat loop
var fDate = new Date(bValues[i][0]);
if (fDate.getDate() == today.getDate() && 
    fDate.getMonth() == today.getMonth() && 
    fDate.getFullYear() == today.getFullYear()) { // if the date in the cell is today's date...

   sheet.getRange(i + 2, 3, 1, 1).setValue(timeStamp);   
}
}
}
}  

这给了我以下错误:“范围的坐标或尺寸无效。(第16行)”

2 个答案:

答案 0 :(得分:1)

至少有一张工作表为空或只有一行数据。

在第16行的本例中,sheet.getLastRow() - 1将为0或-1,这将产生错误。

答案 1 :(得分:0)

我最终想到了,我使用了forEach函数:

function myFunction(){ 
var date = new Date();

var hours = date.getHours()
var minutes =  date.getMinutes()
var timeStamp = hours + ':' + minutes

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
sheets.forEach (function (sheet) {

var columnB = sheet.getRange(2, 2, 70, 1); 
var bValues = columnB.getValues(); 
var today = new Date(); 
for (var i = 0; i < bValues.length; i++) { 
var fDate = new Date(bValues[i][0]);
if (fDate.getDate() == today.getDate() && 
    fDate.getMonth() == today.getMonth() && 
    fDate.getFullYear() == today.getFullYear()) { 
    sheet.getRange(i + 2, 7, 1, 1).setValue(timeStamp);   
}
}
}