2012-10-30 38 views
1

我想在不在同一個域上的用戶之間複製Google Spreadsheet文件。源文件有分享設置任何人都可以通過鏈接編輯。 我創建了一個Web應用程序(具有執行權限設置爲用戶訪問Web應用程序)調用的安裝功能:如何在不同域的用戶之間創建文件的副本?

我希望代碼將讀取源文件,該文件是對所有人開放,使一個本地副本到運行Web App的用戶的Google Drive(當然假設用戶接受運行該腳本)。這個行爲在我運行它的時候起作用(因爲我是源的所有者),但如果用戶來自另一個域,則不起作用。

有關如何實現此目的的任何建議?

function doInstall() { 
// The source file is readable by everybody with the link; 
    var file = DocsList.getFileById('0AlVPTKz1xoevdHc1ZTQ2OGFMXXXXXXXYYYYZZZZ'); 
    file.makeCopy('Test Copy Spreadsheet'); 
} 
+1

我相信你的代碼應該工作,因爲電子表格是所有人都可以訪問的。我唯一能想到的其他事情是域管理員禁止在域外共享文件。如果情況並非如此,那麼您應該在問題跟蹤器 – Srik

+0

中設置讓共享文檔在組織外部出現問題。您建議谷歌應用程序腳本的問題跟蹤器? – VanacK

+0

創建了[問題2030](http://code.google.com/p/google-apps-script-issues/issues/detail?id=2030)。 – VanacK

回答

0

我有一個不同但相似的用例和問題。和您一樣,我的源文件可供任何具有該鏈接的人訪問,並且我的域設置允許用戶在我的域外共享內容。它適用於我,但不適合他們。

這可能爲你工作,這對我來說(到目前爲止):

假設你有你的原始腳本...

  1. 爲「腳本的Web應用程序」創建一個單獨的腳本。
  2. 使用ScriptDb編寫一個函數(例如loadFileIds())來存儲必要的fileIds。運行loadFileIds()函數。
  3. 在同一項目中編寫另一個函數(例如getFileId()),該函數在調用ScriptDb.getMyDb時返回所需的文件Id。避免在此函數中使用DocsList。我原本以爲因爲getFileId()會'像我一樣運行',所以它可以正常運行,但當其他用戶觸發腳本時,它總是會導致失敗的DocsList行。
  4. 在文件>管理版本:保存項目的版本。
  5. 在發佈:將該項目的版本部署爲Web應用程序。選擇執行應用程序爲「me([email protected]」,並將誰有權訪問該網絡應用程序設置爲「任何人」。
  6. 在您的原始項目中,轉到管理資源並輸入Web應用程序的項目密鑰,選擇一個版本並複製標識符。
  7. 編寫一個調用yourIdentifier.getFileId()的函數,並希望 - 返回fileId。

以我迄今爲止的經驗,當DocsList方法返回null時,外部用戶已經能夠訪問它們不能訪問的文件。但還有一件事需要補充......您可能會發現您必須與您的用戶分享您的網絡應用程序腳本。我沒有確定這是必要的,但是當我不知道時我遇到了錯誤。我沒有選擇給他們發送鏈接的選項。

我學會了如何從examples in the documentationthis video當然StackOverflow上的做到這一點。

正如你所看到的,我仍然在自己工作,系統的測試迄今爲止只是我模擬其他用戶。所以沒有承諾。祝你好運!我會爲你解決問題。

相關問題