2017-09-06 38 views
2

我是編程的新手,我意識到它可能是一個愚蠢的,但我似乎無法找到解決方案。 我在Google表格中使用onOpen觸發器和onEdit觸發器。 onOpen函數只通過輸入框從用戶處獲得一個名稱。 現在,我想用onEdit函數爲用戶對單元格添加時間戳名稱時所做的所有更改進行時間戳記。 我希望我的目標明確。如何在另一個函數中使用函數的值編輯

下面是應該代碼:

function onOpen() { 
    var id = Browser.inputBox('ID Check', 'Enter your name', Browser.Buttons.OK); 

    return id 
} 

function onEdit() { 
    // Set a comment on the edited cell to indicate when it was changed. 
    var ss = SpreadsheetApp.getActiveSpreadsheet() 
    var sheet = ss.getSheets()[0] 
    var range = sheet.getActiveRange() 

    // var name = onOpen().value; .... this what i would like to get 

    range.setNote('Last modified: ' + new Date() + name); 
} 

所以不是每一個動作後,輸入我的名字,我希望它把我的名字在會議開始,並用它在整個會議進行添加到時間戳。

+0

如果'onOpen'是一個回調函數,從它返回沒有什麼意義。您需要覆蓋全局變量或其他一些機制。 – Carcigenicate

+0

同時會有多個用戶嗎?這些用戶是否會登錄Google帳戶? –

回答

2

如果電子表格的用戶都已登錄到他們的Google帳戶,那麼您可以將他們的名稱保存爲「用戶屬性」服務。如果多個用戶同時使用電子表格,則即使代碼使用相同的密鑰名稱,用戶屬性也會爲該用戶獲取正確的名稱。

如果用戶未登錄Google帳戶,則無法使用用戶屬性。您可以將每個用戶名保存到電子表格的文檔屬性中,但如果同一電子表格的多個用戶未登錄到Google帳戶,則電子表格無法「知道」誰在使用電子表格,因此無法知道什麼名字來檢索。

因此,如果多個用戶將使用同一個電子表格的同時,那麼唯一的辦法知道分配是,如果用戶有一個谷歌帳戶,他們在登錄什麼名字。

以下代碼顯示如何保存並從用戶屬性中檢索名稱。

function onOpen() { 
    var usrProps,sessionName; 

    sessionName = Browser.inputBox('ID Check', 'Enter your name', Browser.Buttons.OK); 

    if (!sessionName) {//The user did not enter a name 
    sessionName = Session.getActiveUser().getEmail();//Get the logged in users email address 

    sessionName = sessionName.slice(0,sessionName.indexOf("@"));//Remove domain part of email address 
    } 

    usrProps = PropertiesService.getUserProperties();//Get User Properties 

    usrProps.setProperty('usrName', sessionName);//Save the user name with a key name 

    return sessionName; 
} 

function onEdit() { 
    var currentNote,newNote,sessionName,usrProps; 

    // Set a comment on the edited cell to indicate when it was changed. 
    var ss = SpreadsheetApp.getActiveSpreadsheet() 
    var sheet = ss.getSheets()[0] 
    var range = sheet.getActiveRange() 

    // var name = onOpen().value; .... this what i would like to get 
    usrProps = PropertiesService.getUserProperties();//Get User Properties 

    sessionName = usrProps.getProperty('usrName');//Get the user name for this user that was saved in onOpen 

    currentNote = range.getNote();//Get current note 

    if (currentNote) { 
    newNote = currentNote + ' - Last modified: ' + new Date() + sessionName; 
    } else { 
    newNote = 'Last modified: ' + new Date() + sessionName; 
    } 

    range.clear({commentsOnly: true});//Clear existing comment 
    range.setNote(newNote); 
} 
+0

非常感謝你@Sandy!我們所有的用戶都會使用Google帳戶,所以它不應該是一個問題。 我有什麼機會讓這些時間戳成列表?我不打算導出它,只是爲現有的時間戳添加新的時間戳,而不是覆蓋它們。 – Norbert

+0

可以檢索現有筆記,然後將新內容連接到現有筆記。查看更新的答案。您可以點擊此帖子的綠色大檢票標記,將我的答案標記爲正確。 –

+0

嗨,桑迪,你有什麼想法,爲什麼我會在每一輪添加兩次註釋?無論如何,我真的不明白這個特定的IF語句是如何工作的。你能向我澄清一下嗎? – Norbert

相關問題