2017-03-17 46 views
1

由於我不是特別精通Google Sheet腳本,因此在Google上做相當體面的事情,併爲我工作。自定義Google表格凍結時間戳公式

如果我在我的RSS閱讀器中保存文章,我正在使用IFTTT.com自動追加Google表格。

隨着IFTTT的工作方式,它會根據保存的文章的各種屬性在表格的底部添加一行。

我越來越掛斷了向該行添加自動非易失性時間戳。

我試過使用下面的自動時間戳功能,當我鍵入一個單元格時工作,但不是當附加表單時。

function onEdit(event) 
{ 
    var timezone = "GMT-5"; 
    var timestamp_format = "MM-dd-yyyy"; // Timestamp Format. 
    var updateColName = "Article Title"; 
    var timeStampColName = "Date Discovered"; 
    var sheet = event.source.getSheetByName('Sheet1'); //Name of the sheet where you want to run this script. 


    var actRng = event.source.getActiveRange(); 
    var editColumn = actRng.getColumn(); 
    var index = actRng.getRowIndex(); 
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
    var dateCol = headers[0].indexOf(timeStampColName); 
    var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1; 
    if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself! 
    var cell = sheet.getRange(index, dateCol + 1); 
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format); 
    cell.setValue(date); 
    } 
} 

IFTTT可以讓你設置什麼樣的數據被移植到什麼樣的列,並有具體的「成分」從資訊提供ly數據可以放入列。

它們還允許使用靜態文本和公式。

意識到這一點,我發現以下自定義函數,這似乎有點工作。

function timestamp() { 
return new Date() 
} 

這使得如果是真的我補充一個函數來檢查文章的標題是否有內容,和時間戳。

=時間戳(INDIRECT(「E」 & ROW()))

奇怪的是,當我今天重新裝紙​​的第一行用這個公式並沒有改變(我昨天輸入公式),也沒有一個沿着表格向下排。

源工作表:https://docs.google.com/spreadsheets/d/1ybfgOgBkqHdld9_sexzMfdMV2lT6Qp7WgQ8Di96S-a8/edit?usp=sharing

很多提前感謝。

+0

查看OnEdit或OnSubmit {Event Object}(https://developers.google.com/apps-script/guides/triggers/events)以運行該函數,並將時間戳放置在正確的位置。這將是觸發器IFTTT導致的功能,如果有的話。如果是OnEdit,那麼您可以從傳遞給觸發器的數據中獲取行。其他觸發器可能需要通過電子表格循環才能找到最後一行。 –

回答

0

由於您只對發現日期感興趣,並且不太在意確切的時間。您可以爲函數設置一個時間觸發器,以便在午夜之後每天運行,以將昨天日期的時間戳添加到非空「文章標題」列的行中。

這裏是代碼,做到了這一點,還增加了一個功能設置每日觸發

// Run this function to setup daily trigger to run at midnight to set the date of discovery. 

function IntializeTrig(){ 

ScriptApp.newTrigger("addTimeStamp").timeBased().atHour(0).everyDays(1).create() 
    // If you have issues with timezone or if you work late at night you can change time to say 2 am by changing to this ".atHour(2)" 
} 
// This function checks to see if the column Date Discovered is empty and add yesterday date to it, if Article Title column is a Non empty String 
function addTimeStamp(){ 
var ss = SpreadsheetApp.getActive() 
var sheet = ss.getSheetByName("Sheet1") 
var updateColName = "Article Title"; 
var timeStampColName = "Date Discovered"; 
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
var dateCol = headers[0].indexOf(timeStampColName), dateCol =dateCol + 1; 
var articleCol = headers[0].indexOf(updateColName), articleCol = articleCol + 1; 
var numOfCol 
if (dateCol < articleCol){ 
    numOfCol = articleCol 
}else { 
    numOfCol = dateCol 
} 
var yesterday = new Date(Date.now() - 864e5) 
var yestDate = yesterday.toISOString().slice(0,10) 
var data = sheet.getRange(2, 1,sheet.getLastRow()-1, numOfCol).getValues() 
for (var i = 0 ; i< data.length ; i++){ 
    if (data[i][articleCol - 1] !== "") 
    if (data[i][dateCol - 1] == "") 
     data[i][dateCol - 1] = yestDate 
} 
    sheet.getRange(2,1,data.length , data[0].length).setValues(data) 
} 

希望這有助於!

+0

這工作很好! –