1

我製作了一個更大(1000多行代碼)的應用程序腳本。這對我很有效。沒有其他用戶可以運行它。我希望他們也能夠運行它,我無法弄清楚爲什麼他們不能。我的程序將電子表格轉換爲Excel文件。但它只適用於一個用戶

的問題發生在這一部分:

var id = 'A_correct_ID_of_a_Google_Spreadsheet'; 
var SSurl = 'https://docs.google.com/feeds/'; 
var doc = UrlFetchApp.fetch(SSurl+'download/spreadsheets/Export?key='+id+'&exportFormat=xls',googleOAuth_('docs',SSurl)).getBlob(); 
var spreadsheet = DocsList.createFile(doc); 

功能(和結構)在這裏公佈:other thread

function googleOAuth_(name,scope) { 
    var oAuthConfig = UrlFetchApp.addOAuthService(name); 
    oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope); 
    oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken"); 
    oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken"); 
    oAuthConfig.setConsumerKey('anonymous'); 
    oAuthConfig.setConsumerSecret('anonymous'); 
    return {oAuthServiceName:name, oAuthUseToken:"always"}; 
} 

我不明白爲什麼程序只將運行以任何理由一個用戶。所有文件都在所有用戶之間共享,並且所有權已交換。

+0

您是否試過將應用程序部署爲「任何人,甚至匿名」或「需要登錄」而不是「只是我」? – AKarthik10

+0

此oauth 1內置支持不適用於Web應用程序。您的用戶需要從電子表格(如菜單或按鈕)運行此功能,或者您必須在腳本中開發對oauth 2的支持(它不是內置的)。這裏有一些代碼示例。 –

+0

此腳本從菜單按鈕的Speadsheet(Google表單 - 答案單)運行 –

回答

0

當腳本使用oAuth(googleOAuth_(name,scope))時,它需要從腳本編輯器授權,與用戶使用「正常」常規過程授予的其他授權無關。 長期以來,這一直是enhancement request的對象,據我所知沒有有效的解決方法。

因此,根據腳本的部署方式(在SS或文檔中或作爲webApp),您可能會找到解決方案或不是......如果您按照您的文章的第一條評論所建議,一個web應用程序可以將其部署爲自己運行並允許匿名訪問,並且它可以輕鬆工作,但在其他情況下,其他用戶將不得不打開腳本編輯器並運行觸發oAuth授權過程的功能。

+0

當我運行腳本時(在scipteditor或電子表格中),它將一直運行,直到行: var doc = UrlFet ... Blob(); 即使嘗試{...} catch(e){...}也沒有錯誤。 –

+0

說實話,我沒有看到getBlob()...,urlfetch返回的數據已經是一個blob,所以它確實沒有必要。對不起,沒有告訴過你。 –

相關問題