Quyền bắt buộc: https://www.googleapis.com/auth/spreadsheets
Tôi đã tạo một mã đơn giản trên appscript để đưa tên tệp Google Drive ra khỏi URL
function FileName (URL) {
var ss = SpreadsheetApp.openByUrl(URL);
return ss.getName();
}
Khi tôi chạy, tôi gặp lỗi:
Ngoại lệ: Bạn không có quyền gọi SpreadsheetApp.openByUrl. Quyền bắt buộc:https://www.googleapis.com/auth/spreadsheets (linha 6).
Tôi đã bật API Drive và Trang tính trong khu vực Dịch vụ nâng cao của Google, vì vậy, "https://www.googleapis.com/auth/spreadsheets" sẽ ổn, nhưng không.
Làm thế nào tôi có thể làm cho nó hoạt động?
Tôi đã tạo một trang tính mẫu trong liên kết này với bản sao sự cố.
Trả lời
Giải thích vấn đề:
Bạn đang sử dụng một chức năng tùy chỉnh.
Nó được giải thích rất rõ trong tài liệu chính thức :
Nếu chức năng tùy chỉnh của bạn đưa ra thông báo lỗi Bạn không có quyền gọi dịch vụ X., dịch vụ yêu cầu ủy quyền của người dùng và do đó không thể được sử dụng trong một chức năng tùy chỉnh.
Như thông báo đã nêu rõ, bạn không được phép sử dụng các dịch vụ yêu cầu ủy quyền chẳng hạn như SpreadsheetApp.openByUrl(URL)trong một chức năng tùy chỉnh.
Cũng có một bảng đặc biệt chỉ ra rằng SpreadsheetApp.openByUrl(URL);không thể được sử dụng trong một hàm tùy chỉnh:
Cách giải quyết:
Bạn có thể sử dụng các hàm thông thường theo nhiều cách:
- Được triển khai dưới dạng các nút menu tùy chỉnh,
- Thực thi chúng từ trình chỉnh sửa tập lệnh,
- Thực thi chúng thông qua các trình kích hoạt đơn giản ,
- Tạo menu addon, v.v.
Phiên bản chức năng thông thường của tập lệnh của bạn :
function FileName () {
var URL = "spreadsheet_url"
var ss = SpreadsheetApp.openByUrl(URL);
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
sheet.getRange('A1').setValue(ss.getName());
}
Sau khi thực hiện (xem hình), kịch bản này sẽ thiết lập giá trị của di động A1của Sheet1tên của tập tin bảng tính.
Tôi khuyên bạn nên tìm các chức năng mà tôi đã sử dụng trong tập lệnh này trong tài liệu chính thức để xem mỗi chức năng trong số chúng có chức năng gì.
Cập nhật:
Tôi vừa mở trang tính của bạn và thấy rằng bạn đang sử dụng SpreadsheetApp.openByUrl(URL);nhưng phương pháp này chỉ hoạt động với các bảng tính do đó có tên lớp SpreadsheetApp. Nếu bạn muốn mở một ID tệp thì bạn cần sử dụng getFileById (id) . Tôi thấy trong cột đầu tiên bạn có Url tệp nhưng không có phương pháp nào để mở tệp bằng URL của nó. Id từ một tệp như vậy:
https://drive.google.com/file/d/1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp/view?usp=sharing
Là:
1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp
Do đó bạn cần sử dụng
var files = DriveApp.getFileById('1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp')
Một đoạn mã sẽ như thế:
function FileName () {
var URL = "1d-2L5kGZWbUa_p7iLgBBa59QqZiyIhgp"
var file = DriveApp.getFileById(URL);
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
sheet.getRange('B1').setValue(file.getName());
}
Hãy làm quen với GAS vì câu hỏi này vừa trở thành một câu hỏi cần tập trung hơn.