Wymagane uprawnienia: https://www.googleapis.com/auth/spreadsheets

Nov 18 2020

Utworzyłem prosty kod w appscript, aby uzyskać nazwy plików na Dysku Google z adresu URL

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

Kiedy uruchamiam, pojawia się błąd:

Wyjątek: nie masz uprawnień do wywoływania SpreadsheetApp.openByUrl. Wymagane uprawnienia:https://www.googleapis.com/auth/spreadsheets (Linha 6).

Mam już włączony interfejs Drive and Sheets API w obszarze Zaawansowane usługi Google, więc „https://www.googleapis.com/auth/spreadsheets” powinno być w porządku, ale tak nie jest.

Jak mogłem to zrobić?

Utworzyłem przykładowy arkusz w tym linku z replikacją problemu.

Odpowiedzi

2 Marios Nov 18 2020 at 15:29

Wyjaśnienie problemu:

Używasz funkcji niestandardowej.

Jest to bardzo dobrze wyjaśnione w oficjalnej dokumentacji :

Jeśli funkcja niestandardowa generuje komunikat o błędzie Nie masz uprawnień do wywoływania usługi X., usługa wymaga autoryzacji użytkownika i dlatego nie może być używana w funkcji niestandardowej.

Jak jasno stwierdza komunikat, nie możesz korzystać z usług, które wymagają autoryzacji, na przykład w SpreadsheetApp.openByUrl(URL)ramach funkcji niestandardowej.

Istnieje również tabela, która szczególnie wskazuje, że SpreadsheetApp.openByUrl(URL);nie można jej używać w ramach funkcji niestandardowej:

Obejścia:

Możesz używać zwykłych funkcji na wiele sposobów:

  1. Zaimplementowane jako niestandardowe przyciski menu,
  2. Wykonaj je z edytora skryptów,
  3. Wykonaj je za pomocą prostych wyzwalaczy ,
  4. Utwórz menu dodatków itp.

Wersja Twojego skryptu o zwykłej funkcji :

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

Po wykonaniu (patrz ilustracja), skrypt zostanie ustawiona wartość komórki A1z Sheet1nazwy pliku arkusza kalkulacyjnego.

Radziłbym poszukać funkcji, których użyłem w tym skrypcie w oficjalnej dokumentacji, aby zobaczyć, co robi każda z nich.

Aktualizacja:

Właśnie otworzyłem twój arkusz i zobaczyłem, że używasz, SpreadsheetApp.openByUrl(URL);ale ta metoda działa tylko w przypadku arkuszy kalkulacyjnych, stąd nazwa klasy SpreadsheetApp. Jeśli chcesz otworzyć identyfikator pliku, musisz użyć getFileById (id) . Widzę, że w pierwszej kolumnie masz adresy URL plików, ale nie ma metody, aby otworzyć plik według jego adresu URL. Identyfikator z takiego pliku:

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

jest:

1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp

Dlatego musisz użyć

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

Fragment kodu będzie wyglądał następująco:

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

Zapoznaj się z GAS, ponieważ to pytanie stało się kwestią wymagającą większej uwagi.