2017-08-04 49 views
-1

目前,我試圖找到一種方法來跟蹤各個單元格更改隨個別時間戳的更改。我想跟蹤更改,以便每次更改這些行時,都會在另一列中標記新的時間戳。我需要跟蹤每次有人使用新列中的新時間戳進行更改。如何使用Appscript函數和導入範圍列跟蹤時間戳

你認爲有人可以幫助我嗎?

這是我正在使用的功能,我只是要設置一個觸發器,每天關閉。我不確定這是跟蹤此類更改的最佳方法,因此如果有人有任何其他建議,我可以接受其他建議。唯一的想法是,當你使用importrange作爲值時,onEdit函數不起作用。我把工作的一個例子中,我在這裏使用:https://docs.google.com/spreadsheets/d/1PLmkEmJ6sMeu1Y-8mEJ5FaSNIXVnzEuYrilFNA7G0Pk/edit#gid=464181309

的.js我試圖用:

function checkCompleted() { 
 
    var s = SpreadsheetApp.getActive().getSheetByName('Sheet1'); 
 
    s.getRange('G2:H').getValues() 
 
    .forEach (function (r, i) { 
 
    if(r[0] == 'Completed' && !r[1]) 
 
    s.getRange(i + 2, 8).setValue(new Date()) 
 
    }) 
 
}

+0

看看這個[鏈接](https://sites.google.com/site/appsscripttutorial/urlfetch-and-oauth/get-the-revision-history-對的一資源使用,已超出DocsList-API)。 – Cooper

+0

@pnuts你會有其他建議嗎?我在這裏不是一個有經驗的開發人員。 –

+0

@cooper謝謝!這很有幫助 –

回答

0

更改跟蹤日誌

與跟蹤的問題只需更改時間戳即可進行更改,因爲您只知道給定行的最後更改。所以我建議只寫一條短消息到一個日誌條目,你可以隨時回來閱讀。這將包括時間戳,電子表格名稱,工作表名稱,範圍更改,舊值和新值。您將需要創建一個文件。我使用Drive Notepad創建文件,並將所有這些類型的文件放在一個數據文件夾中,您將需要數據文件夾的ID。您還需要電子表格的ID和希望記錄編輯的工作表的名稱。

您需要爲onEditLog函數創建onEdit觸發器。

驗證碼:

function onEditLog(e) 
{ 
    var ss=e.source.openById('SpreadsheetId'); 
    var docnam=ss.getname(); 
    var shtnam=ss.getActiveSheet().getName(); 
    var range=e.range.getA1Notation(); 
    if(docnam=='Your Document Name' && shtnam=='Sheet1') 
    { 
    var msg= 'Spreadsheet: ' + docnam + ' Sheet: ' + shtnam + + 'Range: ' + range + ' has been changed from ' + e.oldvalue + ' to ' + e.value; 
    logEntry1(msg,'filename'); 
    } 

} 

function logEntry1(entry,file)//not you cannot run this function like other functions from your script editor. It must be run from an onEdit trigger so that it has access to the event object. 
{ 
    var file = (typeof(file) != 'undefined')?file:'eventlog.txt'; 
    var entry = (typeof(entry) != 'undefined')?entry:'No entry string provided.'; 
    if(entry) 
    { 
    var ts = Utilities.formatDate(new Date(), "GMT-6", "yyyy-MM-dd' 'hh:mm:ss a"); 
    var s = ts + ' - ' + entry + '\n'; 
    saveFile(s, file, true); 
    } 
} 

//this function is taken from myUtility library you'll need to add your own DefaultFileName and DataFolderID. 
function saveFile(datstr,filename,append) 
{ 
    var append = (typeof(append) !== 'undefined')? append : false; 
    var filename = (typeof(filename) !== 'undefined')? filename : DefaultFileName;//make change here. It is a string so put quotes around it. 
    var datstr = (typeof(datstr) !== 'undefined')? datstr : ''; 
    var folderID = (typeof(folderID) !== 'undefined')? folderID : DataFolderID;//make other change here. Again it is a string 
    var fldr = DriveApp.getFolderById(folderID); 
    var file = fldr.getFilesByName(filename); 
    var targetFound = false; 
    while(file.hasNext()) 
    { 
    var fi = file.next(); 
    var target = fi.getName(); 
    if(target == filename) 
    { 
     if(append) 
     { 
     datstr = fi.getBlob().getDataAsString() + datstr; 
     } 
     targetFound = true; 
     fi.setContent(datstr); 
    } 
    } 
    if(!targetFound) 
    { 
    var create = fldr.createFile(filename, datstr); 
    if(create) 
    { 
     targetFound = true; 
    } 
    } 
    return targetFound; 
} 
+0

感謝@Cooper,我遇到的問題是,這些更改來自導入區域,OnEdit無法使用AppScript跟蹤導入區域。 –

+0

我可能不得不重新考慮這個過程,儘管如果沒有簡單的工作來使用OnEdit的ImportatRange。有什麼想法嗎? –

+0

既然你使用importRange,我想我可以假設你從另一個工作表或電子表格中獲取數據。我不知道數據源是如何獲取數據的,但是如果它與表單鏈接,你可以使用表單提交,或者你可以使用時間觸發器並複製你想要的行並追加到目標表單中,我認爲其中任何一個都可以被onChange觸發器檢測到。或者你可以從源電子表格腳本中進行計算。 – Cooper

相關問題