Wymagane uprawnienia: https://www.googleapis.com/auth/spreadsheets
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
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:
- Zaimplementowane jako niestandardowe przyciski menu,
- Wykonaj je z edytora skryptów,
- Wykonaj je za pomocą prostych wyzwalaczy ,
- 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.