สิทธิ์ที่จำเป็น: https://www.googleapis.com/auth/spreadsheets

Nov 18 2020

ฉันได้สร้างรหัสง่ายๆบน appscript เพื่อดึงชื่อไฟล์ Google Drive ออกจาก URL

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

เมื่อฉันเรียกใช้ฉันได้รับข้อผิดพลาด:

ข้อยกเว้น: คุณไม่มีสิทธิ์เรียกใช้ SpreadsheetApp.openByUrl สิทธิ์ที่จำเป็น:https://www.googleapis.com/auth/spreadsheets (ลินฮา 6).

ฉันได้เปิดใช้ Drive and Sheets API ในส่วนบริการขั้นสูงของ 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หากคุณต้องการที่จะเปิดไฟล์ ID แล้วคุณจำเป็นต้องใช้getFileById (ID) ฉันเห็นในคอลัมน์แรกคุณมี URL ของไฟล์ แต่ไม่มีวิธีการเปิดไฟล์โดยใช้ URL id จากไฟล์เช่นนั้น:

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 เพราะคำถามนี้กลายเป็นคำถามที่ต้องเน้นมากขึ้น