การแก้ปัญหา

แม้แต่นักพัฒนาซอฟต์แวร์ที่มีประสบการณ์มากที่สุดก็แทบจะเขียนโค้ดไม่ถูกในครั้งแรก ทำให้การแก้ปัญหาเป็นส่วนสำคัญของกระบวนการพัฒนา ใน ในส่วนนี้ เราจะกล่าวถึงเทคนิคบางประการที่จะช่วยให้คุณค้นหา ทำความเข้าใจ ข้อผิดพลาดในสคริปต์ของคุณ

ข้อความแสดงข้อผิดพลาด

เมื่อสคริปต์ของคุณพบข้อผิดพลาด ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น ข้อความ พร้อมกับหมายเลขบรรทัดที่ใช้สำหรับแก้ปัญหา มีข้อมูลเบื้องต้น 2 แบบ ประเภทข้อผิดพลาดที่แสดงในลักษณะนี้ ได้แก่ ข้อผิดพลาดเกี่ยวกับไวยากรณ์และข้อผิดพลาดรันไทม์

ข้อผิดพลาดทางไวยากรณ์

ข้อผิดพลาดด้านไวยากรณ์เกิดจากการเขียนโค้ดที่ไม่เป็นไปตาม JavaScript ไวยากรณ์ และข้อผิดพลาดจะถูกตรวจจับทันทีที่คุณพยายามบันทึกสคริปต์ ตัวอย่างเช่น ข้อมูลโค้ดต่อไปนี้มีข้อผิดพลาดทางไวยากรณ์

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

ปัญหาไวยากรณ์ที่นี่มีอักขระ ) ตัวที่ขาดหายไปในตอนท้ายของที่ 4 บรรทัด เมื่อพยายามบันทึกสคริปต์ คุณจะได้รับข้อผิดพลาดต่อไปนี้

ไม่มี ) หลังจากรายการอาร์กิวเมนต์ (บรรทัดที่ 4)

ข้อผิดพลาดประเภทนี้มักแก้ไขได้ง่ายๆ เนื่องจากมักพบ ทันทีและมักมีสาเหตุง่ายๆ คุณไม่สามารถบันทึก มีข้อผิดพลาดทางไวยากรณ์ ซึ่งหมายความว่าระบบจะบันทึกเฉพาะโค้ดที่ถูกต้องลงใน โปรเจ็กต์ของคุณ

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้เกิดจากการใช้ฟังก์ชันหรือคลาสอย่างไม่ถูกต้อง และจะใช้ได้เฉพาะ เมื่อเรียกใช้สคริปต์แล้ว ตัวอย่างเช่น โค้ดต่อไปนี้ ทำให้เกิดข้อผิดพลาดรันไทม์:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

โค้ดมีรูปแบบที่ถูกต้อง แต่เราส่งค่า "john" สำหรับ เมื่อโทรหา MailApp.sendEmail เนื่องจากไม่ใช่ ที่อยู่อีเมลที่ถูกต้อง มีข้อผิดพลาดต่อไปนี้เกิดขึ้นเมื่อเรียกใช้สคริปต์:

อีเมลไม่ถูกต้อง: john (บรรทัดที่ 5)

สิ่งที่ทำให้ข้อผิดพลาดเหล่านี้แก้ปัญหาได้ยากกว่าคือ บ่อยครั้งที่ข้อมูล คุณกำลังส่งผ่านไปยังฟังก์ชันที่ไม่ได้เขียนไว้ในโค้ดแต่จะดึง จากสเปรดชีต แบบฟอร์ม หรือแหล่งข้อมูลภายนอกอื่นๆ การใช้การแก้ไขข้อบกพร่อง เทคนิคด้านล่างนี้จะช่วยคุณระบุสาเหตุของข้อผิดพลาดเหล่านี้ได้

ข้อผิดพลาดที่พบบ่อย

ต่อไปนี้คือรายการข้อผิดพลาดที่พบบ่อยและสาเหตุ

มีการเรียกใช้บริการหลายครั้งเกินไป: <action name>

ข้อผิดพลาดนี้แสดงว่าคุณใช้การทำงานเกินโควต้าต่อวันแล้ว เช่น คุณอาจพบข้อผิดพลาดนี้ หากส่งอีเมลมากเกินไปใน วันเดียว โควต้าจะกำหนดที่ระดับที่แตกต่างกันสำหรับผู้ใช้ทั่วไป โดเมน และ บัญชี Premier และอาจมีการเปลี่ยนแปลงได้ตลอดเวลาโดยไม่มีการแจ้งล่วงหน้า จาก Google คุณสามารถดูขีดจำกัดโควต้าสำหรับการดำเนินการต่างๆ ได้ใน เอกสารประกอบเกี่ยวกับโควต้าของ Apps Script

เซิร์ฟเวอร์ไม่พร้อมใช้งานหรือเกิดข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์ โปรดลองอีกครั้ง

ข้อผิดพลาดเหล่านี้อาจมีสาเหตุที่เป็นไปได้หลายประการ:

  • เซิร์ฟเวอร์หรือระบบของ Google ไม่พร้อมใช้งานชั่วคราว โปรดรอสักครู่ แล้วลองเรียกใช้สคริปต์อีกครั้ง
  • มีข้อผิดพลาดในสคริปต์ของคุณที่ไม่มีข้อผิดพลาดที่เกี่ยวข้อง โปรดลองแก้ไขข้อบกพร่องของสคริปต์และดูว่าสามารถแยกปัญหาออกจากกันได้หรือไม่
  • มีข้อบกพร่องใน Google Apps Script ที่ทําให้เกิดข้อผิดพลาดนี้ สำหรับ คำแนะนำในการค้นหาและยื่นรายงานข้อบกพร่อง ได้ที่ ข้อบกพร่อง ก่อนส่งข้อบกพร่องใหม่ ให้ค้นหา เพื่อดูว่ามีคนรายงานเรื่องนี้แล้วหรือยัง

คุณต้องได้รับอนุญาตเพื่อดำเนินการดังกล่าว

ข้อผิดพลาดนี้บ่งบอกว่าสคริปต์ไม่มีสิทธิ์ที่จำเป็นในการเรียกใช้ เมื่อสคริปต์ถูกเรียกใช้ในโปรแกรมแก้ไขสคริปต์ หรือจากรายการเมนูที่กำหนดเอง กล่องโต้ตอบการให้สิทธิ์จะปรากฏขึ้นแก่ผู้ใช้ อย่างไรก็ตาม เมื่อเรียกใช้สคริปต์ จากทริกเกอร์ ฝังในหน้า Google Sites หรือเรียกใช้ในฐานะบริการ แสดงกล่องโต้ตอบไม่ได้และข้อผิดพลาดนี้แสดงขึ้น

หากต้องการให้สิทธิ์สคริปต์ ให้เปิดเครื่องมือแก้ไขสคริปต์และเรียกใช้ฟังก์ชันใดก็ได้ ข้อความแจ้งการให้สิทธิ์จะปรากฏขึ้นเพื่อให้คุณให้สิทธิ์โปรเจ็กต์สคริปต์ได้ หาก สคริปต์มีบริการใหม่ที่ไม่ได้รับอนุญาต คุณต้องให้สิทธิ์สคริปต์อีกครั้ง

ข้อผิดพลาดนี้มักเกิดจาก ทริกเกอร์ที่เริ่มทำงานก่อน ผู้ใช้ อนุญาตแล้ว หากคุณไม่มีสิทธิ์เข้าถึงโปรเจ็กต์สคริปต์ (เนื่องจากข้อผิดพลาดเกิดขึ้นกับส่วนเสริมของคุณ เป็นต้น) คุณสามารถให้สิทธิ์สคริปต์สคริปต์ได้โดยใช้ส่วนเสริม อีกครั้ง หากทริกเกอร์ยังคงเริ่มทำงานและทำให้เกิดข้อผิดพลาดนี้ คุณสามารถนำ โดยทำตามขั้นตอนต่อไปนี้

  1. คลิกทริกเกอร์ ทางด้านซ้ายของโครงการ Apps Script
  2. คลิกเพิ่มเติม ที่ด้านขวาของทริกเกอร์ที่ต้องการนำออก &gt; ลบทริกเกอร์

คุณยังสามารถนำทริกเกอร์ส่วนเสริมที่เป็นปัญหาออกได้โดย ถอนการติดตั้งส่วนเสริม

การเข้าถึงถูกปฏิเสธ: DriveApp หรือนโยบายโดเมนได้ปิดใช้แอปไดรฟ์ของบุคคลที่สาม

ผู้ดูแลระบบของ Google Workspace โดเมนมี สามารถปิดใช้ Drive API สำหรับโดเมนของตน ซึ่งป้องกันไม่ให้ผู้ใช้ ติดตั้งและใช้แอป Google ไดรฟ์ การตั้งค่านี้ยังป้องกันไม่ให้ผู้ใช้ จากการใช้ส่วนเสริมของ Apps Script ที่ใช้ บริการไดรฟ์ หรือ บริการไดรฟ์ขั้นสูง (แม้ว่าสคริปต์จะได้รับอนุญาตก่อนที่ผู้ดูแลระบบจะปิดใช้ Drive API ก็ตาม)

อย่างไรก็ตาม หากมีการเผยแพร่ส่วนเสริมหรือเว็บแอปที่ใช้บริการไดรฟ์สำหรับ การติดตั้งทั่วทั้งโดเมน และได้รับการติดตั้งโดยผู้ดูแลระบบสำหรับผู้ใช้บางส่วนหรือทั้งหมดในโดเมน ของสคริปต์สำหรับผู้ใช้เหล่านั้น แม้ว่าจะปิดใช้ API ของไดรฟ์ใน

สคริปต์ไม่มีสิทธิ์รับข้อมูลประจำตัวของผู้ใช้ที่ใช้งานอยู่

บ่งบอกว่าข้อมูลประจำตัวและอีเมลของผู้ใช้ที่ใช้งานอยู่ไม่พร้อมใช้งานใน สคริปต์ คำเตือนนี้เป็นผลมาจากการเรียกไปยัง Session.getActiveUser() และยังอาจเกิดจากการโทรไปยัง Session.getEffectiveUser() หากสคริปต์ทำงานในโหมดการให้สิทธิ์อื่นนอกเหนือจาก AuthMode.FULL หากมีสัญญาณเตือนนี้ การโทรครั้งต่อๆ ไปไปยัง User.getEmail() แสดงผล "" เท่านั้น

การแก้ปัญหาเกี่ยวกับคำเตือนนี้ทำได้หลายวิธี โดยขึ้นอยู่กับ โหมดการให้สิทธิ์ที่สคริปต์ทำงานอยู่ โหมดการให้สิทธิ์คือ อยู่ในฟังก์ชันที่ทริกเกอร์ เป็น พร็อพเพอร์ตี้ authMode ของ e พารามิเตอร์เหตุการณ์

  • ใน AuthMode.FULL โปรดลองใช้ Session.getEffectiveUser() แทน
  • ใน AuthMode.LIMITED โปรดตรวจสอบว่า เจ้าของให้สิทธิ์สคริปต์
  • ในโหมดการให้สิทธิ์อื่นๆ ให้หลีกเลี่ยงการเรียกใช้วิธีการใดวิธีการหนึ่ง
  • หากคุณเป็น Google Workspace ลูกค้ารายใหม่ พบคำเตือนนี้จาก ทริกเกอร์ที่ติดตั้งได้ ให้ตรวจสอบว่า ทริกเกอร์ทำงานในฐานะผู้ใช้ภายในองค์กร

ไม่มีคลัง

หากคุณเพิ่มไลบรารียอดนิยมลงในสคริปต์ คุณอาจได้รับข้อความแสดงข้อผิดพลาด ว่าขาดหายไป แม้ว่าไลบรารีจะแสดงเป็นทรัพยากร Dependency สำหรับ สคริปต์ของคุณ สาเหตุอาจเกิดจากมีคนเข้าถึงคลังมากเกินไป ไปพร้อมๆ กัน เพื่อหลีกเลี่ยงข้อผิดพลาดนี้ ให้ลองใช้วิธีใดวิธีหนึ่งต่อไปนี้

  • คัดลอกและวางโค้ดของไลบรารีลงในสคริปต์ของคุณ และนำไลบรารีออก การพึ่งพา
  • คัดลอกสคริปต์ไลบรารีและทำให้ใช้งานได้เป็นไลบรารีจากบัญชีของคุณ ตรวจสอบให้แน่ใจว่า เพื่ออัปเดตการอ้างอิงในสคริปต์ต้นฉบับเป็นไลบรารีใหม่ แทนที่จะเป็นสาธารณะ

เกิดข้อผิดพลาดเนื่องจากไม่มีเวอร์ชันไลบรารีหรือเวอร์ชันการทำให้ใช้งานได้ รหัสข้อผิดพลาด Not_Found

ข้อความแสดงข้อผิดพลาดนี้จะระบุถึงข้อใดข้อหนึ่งต่อไปนี้

  • สคริปต์เวอร์ชันที่ทำให้ใช้งานได้ถูกลบไปแล้ว เพื่ออัปเดตการติดตั้งใช้งาน ของสคริปต์ โปรดดูที่ แก้ไข การติดตั้งใช้งาน
  • ลบเวอร์ชันของไลบรารีที่สคริปต์ใช้แล้ว หากต้องการดูว่าองค์กรใด ไม่มีไลบรารี ถัดจากชื่อไลบรารี ให้คลิก เพิ่มเติม &gt; เปิดในแท็บใหม่ ไลบรารีที่ขาดหายไป แสดงข้อความแสดงข้อผิดพลาด หลังจากพบไลบรารีที่คุณต้องการอัปเดตแล้ว ให้ใช้ ดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้
    • โปรดอัปเดตไลบรารีเพื่อใช้เวอร์ชันอื่น โปรดดูการอัปเดต คลัง
    • นำไลบรารีที่ถูกลบออกจากโปรเจ็กต์สคริปต์และโค้ดของคุณ โปรดดู นำคลังออก
  • สคริปต์ของไลบรารีที่สคริปต์ของคุณใช้มี ที่ใช้เวอร์ชันที่ถูกลบ เลือกดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้
    • หากคุณมีสิทธิ์แก้ไขไลบรารีที่สคริปต์ใช้ ให้อัปเดต ไลบรารีรองในสคริปต์นั้นไปยังเวอร์ชันที่มีอยู่
    • โปรดอัปเดตไลบรารีเพื่อใช้เวอร์ชันอื่น โปรดดูการอัปเดต คลัง
    • นำไลบรารีออกจากโปรเจ็กต์สคริปต์และโค้ดของคุณ โปรดดู นำคลังออก

Error 400: invalid_scope เมื่อเรียกใช้ Google Chat API กับบริการขั้นสูง

หากพบ Error 400: invalid_scope พร้อมข้อความแสดงข้อผิดพลาด เรียน Some requested scopes cannot be shown หมายความว่าคุณไม่ได้ระบุขอบเขตการให้สิทธิ์ใดๆ ไว้ในส่วน ไฟล์ appsscript.json ของโครงการ Apps Script ในกรณีส่วนใหญ่ Apps Script จะกำหนดขอบเขตที่สคริปต์ต้องการโดยอัตโนมัติ แต่เมื่อคุณใช้บริการขั้นสูงของ Chat คุณจะต้องเพิ่ม ขอบเขตการให้สิทธิ์ที่สคริปต์ใช้กับ ไฟล์ Manifest ของโครงการ Apps Script โปรดดู การตั้งค่าขอบเขตที่ชัดเจน

หากต้องการแก้ไขข้อผิดพลาด ให้เพิ่มขอบเขตการให้สิทธิ์ที่เหมาะสม ลงในไฟล์ appsscript.json ของโครงการ Apps Script โดยเป็นส่วนหนึ่งของ อาร์เรย์ oauthScopes ตัวอย่างเช่น หากต้องการเรียกเมธอด spaces.messages.create ให้เพิ่มข้อมูลต่อไปนี้

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

การแก้ไขข้อบกพร่อง

ข้อผิดพลาดบางรายการอาจทําให้ข้อความแสดงข้อผิดพลาดปรากฏขึ้นไม่ได้ อาจมีเพิ่มเติม เล็กๆ น้อยๆ ที่โค้ดถูกต้องทางเทคนิคและทำงานได้ แต่ ผลการค้นหาไม่ตรงตามที่คุณคาดหวัง ลองมาดูกลยุทธ์บางอย่างในการจัดการกับ และตรวจสอบสคริปต์ที่ไม่ได้ทำงานตามที่คุณ ที่คุณคาดหวัง

การบันทึก

ขณะแก้ไขข้อบกพร่อง เราขอแนะนำให้บันทึกข้อมูลเป็นโปรเจ็กต์สคริปต์ ในการดำเนินการ Google Apps Script มีวิธีบันทึกข้อมูล 2 วิธี ได้แก่ บริการ Cloud Logging และบริการเครื่องบันทึกและคอนโซลแบบพื้นฐานกว่า ที่มีมาในตัวเครื่องมือแก้ไข Apps Script

ดูรายละเอียดเพิ่มเติมในคู่มือการบันทึก

Error Reporting

ข้อยกเว้นที่เกิดขึ้นเนื่องจากข้อผิดพลาดรันไทม์จะดำเนินการโดยอัตโนมัติ บันทึกไว้โดยใช้บริการรายงานข้อผิดพลาดของ Google Cloud บริการนี้ช่วยให้คุณ ค้นหาและกรองข้อความข้อยกเว้นที่โปรเจ็กต์สคริปต์สร้างขึ้น

หากต้องการเข้าถึงการรายงานข้อผิดพลาด โปรดดูหัวข้อดูบันทึกของระบบคลาวด์และรายงานข้อผิดพลาดใน คอนโซล Google Cloud Platform

การดำเนินการ

ทุกครั้งที่คุณเรียกใช้สคริปต์ Apps Script จะเก็บบันทึกการดำเนินการ รวมถึงบันทึกของ Cloud ระเบียนเหล่านี้จะช่วยให้คุณเข้าใจ การดำเนินการที่สคริปต์ทำ

หากต้องการดูการดำเนินการของสคริปต์ใน โปรเจ็กต์ Apps Script ให้คลิกการดำเนินการทางด้านซ้าย

กำลังตรวจสอบสถานะบริการ Apps Script

แม้ว่าจะพบไม่บ่อย แต่บางครั้งก็เฉพาะเจาะจง บริการ (เช่น Gmail หรือไดรฟ์) พบปัญหาชั่วคราวที่อาจทำให้บริการหยุดทำงาน เมื่อใด เกิดขึ้น โปรเจ็กต์ Apps Script ที่โต้ตอบกับบริการเหล่านี้อาจไม่ทำงาน ตามที่คาดไว้

คุณตรวจสอบได้ว่ามีบริการของ Google Workspace หรือไม่ การหยุดทำงานโดยดู แดชบอร์ดสถานะของ Google Workspace หากการหยุดทำงานเกิดขึ้น คุณต้องรอให้ปัญหาได้รับการแก้ไขก่อน หรือรอให้แก้ไขก่อน ความช่วยเหลือเพิ่มเติมใน ศูนย์ช่วยเหลือของ Google Workspace หรือ ปัญหาที่ทราบเกี่ยวกับ Google Workspace เอกสารประกอบ

ใช้โปรแกรมแก้ไขข้อบกพร่องและจุดพัก

หากต้องการค้นหาปัญหาในสคริปต์ คุณสามารถเรียกใช้ในโหมดแก้ไขข้อบกพร่องได้ เมื่อเรียกใช้ใน สคริปต์จะหยุดชั่วคราวเมื่อเจอเบรกพอยท์ ซึ่งเป็นบรรทัดที่คุณ ไว้ในสคริปต์ ซึ่งคุณคิดว่าอาจมีปัญหา เมื่อสคริปต์ หยุดแสดงผลชั่วคราว ค่าของแต่ละตัวแปรในช่วงเวลานั้น ซึ่งช่วยให้คุณตรวจสอบค่า การทำงานภายในของสคริปต์โดยไม่ต้องเพิ่มคำสั่งการบันทึกจำนวนมาก

เพิ่มเบรกพอยท์

ในการเพิ่มเบรกพอยท์ ให้วางเมาส์เหนือหมายเลขบรรทัดของบรรทัดที่คุณต้องการเพิ่มเบรกพอยท์ เบรกพอยท์ไปยัง คลิกวงกลมทางด้านซ้ายของหมายเลขบรรทัด ด้านล่าง ภาพแสดงตัวอย่างของเบรกพอยท์ที่เพิ่มลงในสคริปต์

เพิ่มเบรกพอยท์

เรียกใช้สคริปต์ในโหมดแก้ไขข้อบกพร่อง

หากต้องการเรียกใช้สคริปต์ในโหมดแก้ไขข้อบกพร่อง ให้คลิกแก้ไขข้อบกพร่องที่ด้านบนของเครื่องมือแก้ไข

ก่อนที่สคริปต์จะเรียกใช้บรรทัดที่มีเบรกพอยท์ สคริปต์จะหยุดชั่วคราวและแสดง ตารางข้อมูลการแก้ไขข้อบกพร่อง คุณสามารถใช้ตารางนี้เพื่อตรวจสอบข้อมูล เช่น ค่าของพารามิเตอร์และข้อมูลที่จัดเก็บไว้ในออบเจ็กต์

หากต้องการควบคุมวิธีเรียกใช้สคริปต์ ที่ด้านบนของแผงโปรแกรมแก้ไขข้อบกพร่อง ใช้ "ก้าวเข้า" "ข้าม" และ "ออก" ซึ่งช่วยให้คุณเรียกใช้ เขียนสคริปต์ทีละบรรทัด แล้วตรวจสอบว่าค่ามีการเปลี่ยนแปลงอย่างไรเมื่อเวลาผ่านไป

ปัญหาเกี่ยวกับบัญชี Google หลายบัญชี

หากคุณเข้าสู่ระบบบัญชี Google หลายบัญชีพร้อมกัน คุณอาจ มีปัญหาในการเข้าถึงส่วนเสริมและเว็บแอปของคุณ การเข้าสู่ระบบหลายบัญชี หรือ การลงชื่อเข้าใช้บัญชี Google หลายบัญชีพร้อมกันจะไม่ได้รับการสนับสนุนสำหรับ Apps สคริปต์ ส่วนเสริม หรือเว็บแอป

  • หากคุณเปิดเครื่องมือแก้ไข Apps Script ขณะลงชื่อเข้าสู่ระบบมากกว่า 1 บัญชี Google Prompt ให้เลือกบัญชีที่ต้องการดำเนินการต่อ

  • หากคุณเปิดเว็บแอปหรือส่วนเสริมและประสบปัญหาเกี่ยวกับการเข้าสู่ระบบหลายบัญชี ให้ลองดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้ โซลูชันต่อไปนี้

    • ออกจากระบบบัญชี Google ทั้งหมด และลงชื่อเข้าใช้เฉพาะบัญชีที่มี ส่วนเสริมหรือเว็บแอปที่ต้องการเข้าถึง
    • เปิดหน้าต่างที่ไม่ระบุตัวตนใน Google Chrome หรือการเรียกดูแบบส่วนตัวที่เทียบเท่า แล้วลงชื่อเข้าสู่ระบบบัญชี Google ที่มีส่วนเสริมหรือเว็บแอปที่คุณ ต้องการเข้าถึง

การขอความช่วยเหลือ

การแก้ปัญหาโดยใช้เครื่องมือและเทคนิคที่ระบุไว้ข้างต้นสามารถช่วยแก้ไข ที่หลากหลาย แต่อาจมีปัญหาบางอย่างที่คุณ ความช่วยเหลือพิเศษในการแก้ไขปัญหา ดูหน้าการสนับสนุนสำหรับ เกี่ยวกับที่ที่จะถามคำถามและรายงานข้อบกพร่อง