आवश्यक अनुमति: https://www.googleapis.com/auth/spreadsheets

Nov 18 2020

मैंने Google डिस्क फ़ाइल नामों को URL से बाहर निकालने के लिए एपस्क्रिप्ट पर एक सरल कोड बनाया है

function FileName (URL) {
  var ss = SpreadsheetApp.openByUrl(URL);
  return ss.getName();
}

जब मुझे लगता है कि मुझे एक त्रुटि मिलती है:

अपवाद: आपके पास SpreadsheetApp.openByUrl को कॉल करने की अनुमति नहीं है। आवश्यक अनुमतियाँ:https://www.googleapis.com/auth/spreadsheets (लीन्हा 6)।

मैंने पहले से ही उन्नत Google सेवा क्षेत्र में ड्राइव और शीट्स एपीआई को सक्षम किया है, इसलिए "https://www.googleapis.com/auth/spreadsheets" ठीक होना चाहिए, लेकिन ऐसा नहीं है।

मैं वह काम कैसे कर सकता था?

मैंने समस्या प्रतिकृति के साथ इस लिंक में एक नमूना पत्रक बनाया है ।

जवाब

2 Marios Nov 18 2020 at 15:29

मुद्दे की व्याख्या:

आप एक कस्टम फ़ंक्शन का उपयोग कर रहे हैं।

यह आधिकारिक दस्तावेज में बहुत अच्छी तरह से समझाया गया है :

यदि आपका कस्टम फ़ंक्शन त्रुटि संदेश फेंकता है, तो आपके पास X सेवा को कॉल करने की अनुमति नहीं है।, सेवा को उपयोगकर्ता प्राधिकरण की आवश्यकता होती है और इस प्रकार कस्टम फ़ंक्शन में उपयोग नहीं किया जा सकता है।

जैसा कि संदेश स्पष्ट रूप से बताता है, आपको उन सेवाओं का उपयोग करने की अनुमति नहीं है जिनके लिए SpreadsheetApp.openByUrl(URL)एक कस्टम फ़ंक्शन के भीतर प्राधिकरण की आवश्यकता होती है।

एक तालिका भी है जो विशेष रूप से इंगित करती है जिसे SpreadsheetApp.openByUrl(URL);एक कस्टम फ़ंक्शन के भीतर उपयोग नहीं किया जा सकता है:

समाधान:

आप कई तरीकों से नियमित कार्यों का उपयोग कर सकते हैं:

  1. कस्टम मेनू बटन के रूप में लागू किया गया,
  2. स्क्रिप्ट संपादक से उन्हें निष्पादित करें,
  3. सरल ट्रिगर के माध्यम से उन्हें निष्पादित करें ,
  4. एक addon मेनू आदि बनाएँ।

आपकी स्क्रिप्ट का नियमित कार्य संस्करण :

function FileName () {
  var URL = "spreadsheet_url"
  var ss = SpreadsheetApp.openByUrl(URL);
  var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  sheet.getRange('A1').setValue(ss.getName());
}

पर निष्पादन (देखें स्क्रीनशॉट), इस स्क्रिप्ट सेल का मान सेट हो जाएगा A1की Sheet1स्प्रेडशीट फ़ाइल के नाम से।

मैं आपको सलाह दूंगा कि आधिकारिक स्क्रिप्ट में इस स्क्रिप्ट में जिन कार्यों का मैंने उपयोग किया है, उन्हें देखें कि उनमें से प्रत्येक क्या करता है।

अपडेट करें:

मैंने अभी आपकी शीट खोली और देखा कि आप उपयोग कर रहे हैं SpreadsheetApp.openByUrl(URL);लेकिन यह विधि केवल स्प्रेडशीट के लिए काम करती है इसलिए वर्ग नाम SpreadsheetApp। यदि आप एक फ़ाइल आईडी खोलना चाहते हैं तो आपको getFileById (id) का उपयोग करना होगा । मैं पहले कॉलम में देखता हूं कि आपके पास फाइल यूआरएल है, लेकिन इसके URL द्वारा फाइल खोलने का कोई तरीका नहीं है। इस तरह से एक फ़ाइल से आईडी:

https://drive.google.com/file/d/1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp/view?usp=sharing

है:

1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp

इसलिए आपको उपयोग करने की आवश्यकता है

var files = DriveApp.getFileById('1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp')

एक कोड स्निपेट ऐसा होगा:

function FileName () {
  var URL = "1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp"
  var file = DriveApp.getFileById(URL);
  var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  sheet.getRange('B1').setValue(file.getName());
}

कृपया अपने आप को GAS से परिचित कराएं क्योंकि यह प्रश्न सिर्फ एक प्रश्न बन गया है जिस पर अधिक ध्यान देने की आवश्यकता है।