2016-11-25 52 views
0

我有一個電子表格裏面有很多工作表,每張工作表代表一個月,並且在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行)。」

回答

1

至少一個您的工作表是空的或只有一行數據。

在這種情況下,在第16行,sheet.getLastRow() - 1將爲0或-1,這是創建錯誤。

+0

感謝您的提示。 –

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); 
} 
} 
} 
相關問題