2016-07-25 70 views
2

我目前正在創建一個電子表格,用戶可以在其中輸入產品編號,工作表將在下兩欄中返回描述和價格。如何讓觸發器在複製的電子表格+腳本中工作?

電子表格從另一個工作表(不是另一個頁面,而是另一個完全不同的URL)抽取項目信息,並且每次輸入項目編號(由於信息位於另一個URL上而沒有查找),工作表會自動更新。

很可能,多個人同時需要此表單,他們還需要一份副本作爲參考記錄。他們都可以訪問我所擁有的「主文件」,我希望他們能夠簡單地複印一份,然後填寫表格。

但是,雖然我的腳本中的代碼在主文件上工作得很好,但當他們進行復制時,程序將無法運行。我知道它與觸發器沒有被複制有關,我已經閱讀了在腳本中編寫觸發器,但這是問題所在。

用戶看不到腳本 - 也就是說,我們不希望他們看到任何代碼。所以他們不能進去,通過「資源」打開觸發器,或者點擊腳本編輯器中的運行/調試。

所以基本上我需要一個用戶能夠打開一個共享的僅查看文件,製作電子表格的副本(從另一個工作表獲取信息並具有觸發器),並使用該電子表格購買輸入項目編號。這些人中的大多數人不應該能夠看到內部運作,並且無論如何都不會理解任何內容。

我在想一個可能的解決方案就像他們在this video大約在25:56或37:355所做的一樣,他們可以在那裏按下一個按鈕並寫入觸發器。儘管如此,他們並沒有過去如何去做。

回答

1

從我的理解你不需要在這裏的腳本,電子表格公式將做的伎倆。
要將數據從一個電子表格導入到另一個電子表格中,可以使用公式「importData」並將這些數據放在隱藏表格中。 然後你可以在這個導入中使用「vlookup」公式或者更好的「過濾器」公式(嘗試你會喜歡它的過濾器公式)。

+0

看到更多關於那個(愚蠢,imho)選項嘿哈羅德,首先我很欣賞響應!第二,我希望我可以保持它對錶單公式的限制,但是由於物品價格和安全問題的方式,這是因爲幾個原因不可能的。 首先,有很多步驟來解決物品價格 - 有國家稅收,物品具體稅收,貨物條款等。 其次,用戶需要能夠編輯表格,我主要關注有人會注意到一張隱藏的表格,取消隱藏它,然後知道這些信息。 – mds93

1

如果您的用戶都在私人領域,您的最佳解決方案將是publish a private add-on(即僅適用於域用戶)。如果您使用的是消費者帳戶,這不是一個選項。

或者,您可以使用菜單驅動的函數以編程方式創建所需的觸發器。這對您的情況很有效,因爲:

  • 「原始」電子表格以只讀方式共享,用戶需要製作個人副本才能輸入自己的數據。
  • 用戶將是他們副本的所有者,因此包含的腳本將以他們和他們的身份運行。

例如,您可以嘗試this shared spreadsheet。它是公共的,只讀的,但如果您保存副本,您將看到一個自定義菜單,該菜單設置觸發器功能,並更新電子表格中的第一個單元格。晚十秒鐘,觸發功能再次更新。

演示腳本包含在電子表格中,所以你可以在那裏看到它。下面是它包含的全部內容:

// Create a menu that will initialize the trigger 
function onOpen() { 
    var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Custom Menu') 
     .addItem('Initialize spreadsheet', 'setTrigger') 
     .addToUi(); 
} 

function setTrigger() { 
    // clear any existing triggers 
    var triggers = ScriptApp.getUserTriggers(SpreadsheetApp.getActive()) 
    for (var i=0; i<triggers.length; i++) { 
    ScriptApp.deleteTrigger(triggers[i]); 
    } 

    // set new trigger 
    ScriptApp.newTrigger("runTrigger") 
      .timeBased() 
      .after(10*1000) // 10s delay 
      .create(); 
    announce("Trigger set. Wait for it..."); 
} 

function runTrigger() { 
    announce("Trigger fired! This completes our demo."); 
} 

// Update first cell in spreadsheet 
function announce(message) { 
    var range = SpreadsheetApp.getActive().getSheets()[0].getRange("A1"); 
    range.setValue(message); 
} 

而不是菜單,你可以包含一個「按鈕」圖像,並鏈接到一個腳本。我沒有看視頻,但這可能是他們做的。你可以在How do you add UI inside cells in a google spreadsheet using app script?

+0

當你說私人域名時,你的意思是指公司的g-mail賬戶,這樣你就可以擁有「公司內部」賬戶只能查看,訪問,編輯等的選項。 另外,我製作了一個文件副本直到我進入選項卡並運行每個函數,腳本才運行。老實說,按鈕的想法實際上似乎是最吸引人的。與我一起工作的人從字面上來說沒有編碼知識,有時在做簡單的表單公式時會遇到困難。我認爲這會讓他們印象深刻。 – mds93

+0

是的,我使用「私人域名」來表示任何Google Apps域名(商業,教育,非盈利)。在複製的電子表格中,菜單在打開表單後顯示幾秒鐘。選擇菜單的一個選項將啓動一個授權對話框,之後觸發器將運行。 – Mogsdad

+0

感謝您的澄清! 不幸的是,你鏈接的示例表沒有工作。我做了一個副本,腳本不會觸發。我可以在頂部看到它顯示「正在工作...」,但沒有更改工作表。 – mds93

相關問題