วิธีการดีบัก Google Apps Script (หรือที่เรียกว่า Logger.log เข้าสู่ระบบ?)


130

ใน Google ชีตคุณสามารถเพิ่มฟังก์ชันการเขียนสคริปต์ได้ ฉันกำลังเพิ่มบางอย่างสำหรับonEditงานนี้ แต่ฉันไม่สามารถบอกได้ว่ามันใช้ได้หรือไม่ เท่าที่ฉันสามารถบอกได้คุณไม่สามารถดีบักเหตุการณ์สดจาก Google ชีตได้ดังนั้นคุณต้องทำจากตัวดีบั๊กซึ่งไม่มีจุดหมายเนื่องจากอาร์กิวเมนต์เหตุการณ์ที่ส่งไปยังonEdit()ฟังก์ชันของฉันจะไม่ได้กำหนดไว้เสมอหากฉันเรียกใช้จากScript Editor.

ดังนั้นฉันจึงพยายามใช้Logger.logวิธีการบันทึกข้อมูลบางอย่างเมื่อใดก็ตามที่มีonEditการเรียกใช้ฟังก์ชัน แต่ดูเหมือนว่ามันจะใช้ได้เฉพาะเมื่อเรียกใช้จากไฟล์Script Editor. เมื่อฉันเรียกใช้จากไฟล์Script Editorฉันสามารถดูบันทึกได้โดยไปที่View->Logs...

ฉันหวังว่าจะสามารถเห็นบันทึกเมื่อเหตุการณ์ถูกดำเนินการจริง แต่ฉันคิดไม่ออก

ฉันจะแก้ไขข้อบกพร่องนี้ได้อย่างไร


3
ปัญหาเดียวกันที่นี่ - คำตอบที่ยอมรับไม่ตอบโจทย์ แต่ให้ข้อมูลที่ผิดธรรมดามากมาย
Hippyjim

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

2
TLDR; คัดลอกวางและเรียกใช้Logger.log('firstLog');MailApp.sendEmail({to:'yourEmailAddressHere@someone.com',subject: "subject here ^_^",body: Logger.getLog()});
Coty Embry

คุณควรเปลี่ยนคำตอบที่ยอมรับหรือเพิ่มหมายเหตุว่า Stackdriver Logging พร้อมใช้งาน
botenvouwer

คำตอบ:


84

UPDATE:

ตามที่เขียนไว้ในคำตอบ นี้

  • Stackdriver Loggingเป็นวิธีการบันทึกที่แนะนำในตอนนี้

  • ใช้console.log()เพื่อเข้าสู่ Stackdriver


Logger.logจะส่งอีเมลถึงคุณ (ในที่สุด) เกี่ยวกับข้อผิดพลาดที่เกิดขึ้นในสคริปต์ของคุณหรือหากคุณกำลังเรียกใช้สิ่งต่างๆจากส่วนScript Editorนี้คุณสามารถดูบันทึกจากฟังก์ชันที่เรียกใช้ล่าสุดได้โดยไปที่View->Logs(ยังอยู่ในโปรแกรมแก้ไขสคริปต์) อีกครั้งนั่นจะแสดงเฉพาะสิ่งที่บันทึกจากฟังก์ชันสุดท้ายที่คุณเรียกใช้จากภายในScript Editorเท่านั้น

สคริปต์ที่ฉันพยายามจะใช้งานต้องทำกับสเปรดชีต - ฉันสร้างรายการสิ่งที่ต้องทำ - รายการตรวจสอบสเปรดชีตที่จัดเรียงรายการตามลำดับความสำคัญและอื่น ๆ

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

เพื่อจำลองที่มีการแก้ไขเซลล์ผมไม่สิ้นสุดมีการทำอะไรบางอย่างในสเปรดชีตที่เกิดขึ้นจริง แต่ ทั้งหมดที่ผมทำก็คือให้แน่ใจว่าเซลล์ที่ฉันอยากให้มันรักษาเป็น "แก้ไข" ได้รับเลือกแล้วผมจะไปScript Editor Run->onEditจากนั้นเบรกพอยต์ของฉันจะถูกกระแทก

แต่ผมไม่ต้องหยุดการใช้โต้แย้งกรณีที่ได้รับการผ่านเข้าสู่ฟังก์ชั่น onEdit - Run->onEditคุณไม่สามารถจำลองว่าการดำเนินการ ข้อมูลใด ๆ ที่ฉันต้องการจากสเปรดชีตเช่นเซลล์ใดถูกเลือก ฯลฯ ฉันต้องหาข้อมูลด้วยตนเอง

ยังไงก็ตามคำตอบยาว ๆ แต่ในที่สุดฉันก็คิดออก


แก้ไข :

หากคุณต้องการดูรายการตรวจสอบสิ่งที่ต้องทำที่ฉันทำคุณสามารถตรวจสอบได้ที่นี่

(ใช่ฉันรู้ว่าใคร ๆ ก็แก้ไขได้ - นั่นคือประเด็นของการแบ่งปัน!)

ฉันหวังว่ามันจะให้คุณเห็นสคริปต์ด้วย เนื่องจากคุณมองไม่เห็นที่นั่นนี่คือ:

function onOpen() {
  setCheckboxes();
};

function setCheckboxes() {
  var checklist = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("checklist");
  var checklist_data_range = checklist.getDataRange();
  var checklist_num_rows = checklist_data_range.getNumRows();
  Logger.log("checklist num rows: " + checklist_num_rows);

  var coredata = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("core_data");
  var coredata_data_range = coredata.getDataRange();

  for(var i = 0 ; i < checklist_num_rows-1; i++) {
    var split = checklist_data_range.getCell(i+2, 3).getValue().split(" || ");
    var item_id = split[split.length - 1];
    if(item_id != "") {
      item_id = parseInt(item_id);
      Logger.log("setting value at ("+(i+2)+",2) to " + coredata_data_range.getCell(item_id+1, 3).getValue());
      checklist_data_range.getCell(i+2,2).setValue(coredata_data_range.getCell(item_id+1, 3).getValue());
    }
  }
}

function onEdit() {
  Logger.log("TESTING TESTING ON EDIT");
  var active_sheet = SpreadsheetApp.getActiveSheet();
  if(active_sheet.getName() == "checklist") {
    var active_range = SpreadsheetApp.getActiveSheet().getActiveRange();
    Logger.log("active_range: " + active_range);
    Logger.log("active range col: " + active_range.getColumn() + "active range row: " + active_range.getRow());
    Logger.log("active_range.value: " + active_range.getCell(1, 1).getValue());
    Logger.log("active_range. colidx: " + active_range.getColumnIndex());
    if(active_range.getCell(1,1).getValue() == "?" || active_range.getCell(1,1).getValue() == "?") {
      Logger.log("made it!");
      var next_cell = active_sheet.getRange(active_range.getRow(), active_range.getColumn()+1, 1, 1).getCell(1,1);
      var val = next_cell.getValue();
      Logger.log("val: " + val);
      var splits = val.split(" || ");
      var item_id = splits[splits.length-1];
      Logger.log("item_id: " + item_id);

      var core_data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("core_data");
      var sheet_data_range = core_data.getDataRange();
      var num_rows = sheet_data_range.getNumRows();
      var sheet_values = sheet_data_range.getValues();
      Logger.log("num_rows: " + num_rows);

      for(var i = 0; i < num_rows; i++) {
        Logger.log("sheet_values[" + (i) + "][" + (8) + "] = " + sheet_values[i][8]);
        if(sheet_values[i][8] == item_id) {
          Logger.log("found it! tyring to set it...");
          sheet_data_range.getCell(i+1, 2+1).setValue(active_range.getCell(1,1).getValue());
        }
      }

    }
  }

  setCheckboxes();
};

Pff การบันทึกจะปรากฏในจดหมายเท่านั้น? นั่นทำให้คุณลักษณะการดีบักและการบันทึกข้อมูลเหล่านี้ไร้ประโยชน์เพราะเราไม่สามารถใช้ข้อมูลจริงจากสเปรดชีตได้อย่างมีประสิทธิภาพ
MrFox

ไม่ตามที่ผู้เขียนกล่าวการบันทึกมีอยู่ในบันทึก (Script Editor, View, Log หรือ Ctrl-Enter)
rainabba

9
@rainabba ใช่การบันทึกมีอยู่ในโปรแกรมแก้ไขสคริปต์ อย่างไรก็ตามเมื่อสคริปต์ขึ้นอยู่กับอาร์กิวเมนต์เหตุการณ์และอาร์กิวเมนต์เหตุการณ์ไม่พร้อมใช้งานในตัวแก้ไขสคริปต์หมายความว่าผู้พัฒนาสคริปต์ประเภทเหล่านี้ไม่มีวิธีเข้าถึงบันทึกแบบเรียลไทม์
Jeff

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

1
คำตอบนี้ล้าสมัยและไม่ควรมองว่าเป็นคำตอบที่ยอมรับ Stackdriver Logging พร้อมใช้งานและทำงานได้อย่างมีเสน่ห์ ดูคำตอบแบบสุ่มชิ้นส่วน!
botenvouwer

34

เท่าที่ฉันสามารถบอกได้คุณไม่สามารถดีบักเหตุการณ์สดจาก google docs ได้ดังนั้นคุณต้องทำจากดีบักเกอร์ซึ่งไม่มีจุดหมายเนื่องจากอาร์กิวเมนต์เหตุการณ์ที่ส่งไปยังฟังก์ชัน onEdit () ของฉันจะไม่ได้กำหนดไว้เสมอหากฉันเรียกใช้ จากโปรแกรมแก้ไขสคริปต์

จริง - ดังนั้นกำหนดอาร์กิวเมนต์เหตุการณ์ด้วยตัวคุณเองสำหรับการดีบัก ดูฉันจะทดสอบฟังก์ชันทริกเกอร์ใน GAS ได้อย่างไร

ฉันพยายามใช้เมธอด Logger.log เพื่อบันทึกข้อมูลบางอย่างเมื่อใดก็ตามที่เรียกใช้ฟังก์ชัน onEdit แต่ดูเหมือนว่าจะใช้งานได้เฉพาะเมื่อเรียกใช้จาก Script Editor เมื่อฉันเรียกใช้จาก Script Editor ฉันสามารถดูบันทึกได้โดยไปที่ View-> Logs ...

จริงอีกครั้ง แต่มีตัวช่วย ไลบรารี BetterLogของ Peter Hermann จะเปลี่ยนเส้นทางบันทึกทั้งหมดไปยังสเปรดชีตทำให้สามารถบันทึกได้แม้กระทั่งจากรหัสที่ไม่ได้แนบกับอินสแตนซ์ของตัวแก้ไข / ดีบักเกอร์

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

Logger = BetterLog.useSpreadsheet();

1
เก่า. console.log()น่าจะเป็นคำตอบที่ดีที่สุดในตอนนี้
TheMaster

22

การอัปเดตปี 2017: ขณะนี้Stackdriver Loggingพร้อมใช้งานสำหรับ Google Apps Script จากแถบเมนูในโปรแกรมแก้ไขสคริปต์View > Stackdriver Loggingไปที่: เพื่อดูหรือสตรีมบันทึก

console.log ()จะเขียนDEBUGข้อความระดับ

ตัวอย่างonEdit()การบันทึก:

function onEdit (e) {
  var debug_e = {
    authMode:  e.authMode,  
    range:  e.range.getA1Notation(),    
    source:  e.source.getId(),
    user:  e.user,   
    value:  e.value,
    oldValue: e. oldValue
  }

  console.log({message: 'onEdit() Event Object', eventObject: debug_e});
}

จากนั้นตรวจสอบบันทึกในStackdriver UI ที่มีป้ายกำกับonEdit() Event Objectเพื่อดูผลลัพธ์


Logger.logคำถามเดิมโดยเฉพาะถามเกี่ยวกับ สิ่งนี้แตกต่างจากconsole.logที่คุณใช้อย่างไร? ฉันใหม่มากกับเครื่องมือดังนั้นแค่พยายามคิดว่าทุกอย่างคืออะไร
AnnanFay

5

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

    //return 'console' //uncomment to output console
    return "actual output";
}

ใน js console.log('smth')ทำงานได้อย่างสมบูรณ์ แต่ใน GAS ล่ะ?
Igor Savinkin

1
console.log จะไม่ทำงานเพียงเพราะ GAS ไม่ใช่สคริปต์ที่ทำงานในหน้าเว็บเดียวกันกับสเปรดชีตของคุณซึ่งเป็นสคริปต์ที่จัดการโดยแอปเอ็นจินของ Google ดังนั้นคุณต้องทำตามโปรแกรมแก้ไขข้อบกพร่อง Logger.log ที่ไม่สามารถใช้งานได้หรือใช้แฮ็กเหมือนของฉัน
woojoo666

แล้วคอนโซลอาร์เรย์ของคุณล่ะ? เมื่อI just returned consoleคุณจะทำอย่างไรเอาท์พุทมันได้หรือไม่
Igor Savinkin

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

5

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

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


5

ฉันได้อ่านโพสต์เหล่านี้และพบคำตอบง่ายๆซึ่งฉันโพสต์ไว้ที่นี่สำหรับผู้ที่ต้องการคำตอบสั้น ๆ และน่ารัก:

  1. ใช้console.log("Hello World")ในสคริปต์ของคุณ
  2. ไปที่https://script.google.com/home/myแล้วเลือกส่วนเสริมของคุณ
  3. คลิกที่เมนูจุดไข่ปลาในรายละเอียดโครงการเลือกการดำเนินการ

ใส่คำอธิบายภาพที่นี่

  1. คลิกที่ส่วนหัวของการดำเนินการล่าสุดและอ่านบันทึก

ใส่คำอธิบายภาพที่นี่


นี่คือ "การบันทึก Stackdriver" พื้นฐานสำหรับ Google Apps Scripts ที่สร้างขึ้นหลังเดือนเมษายน 2019 (ซึ่งเป็นช่วงที่ไม่สามารถเข้าถึงโครงการ Google Cloud สำหรับโครงการ "อัตโนมัติ" ที่อยู่เบื้องหลัง Apps Scripts ได้) ถ้าคุณเปลี่ยน GCP สำหรับโปรเจ็กต์ Apps Script คำตอบการบันทึก Stackdriver ปกติจะมีผล
tehhowch

1
ฉันเห็นเฉพาะการดำเนินการโดยตรงที่นี่ (เช่นการดำเนินการที่ฉันคลิก "เรียกใช้" ในโปรแกรมแก้ไขสคริปต์) แต่ฉันไม่เห็นการดำเนินการที่เกิดจากการเปลี่ยนแปลงข้อมูลในแผ่นงาน ฉันจะแก้ไขข้อบกพร่องเหล่านั้นได้อย่างไร
Cris70

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

1
ใช่ฉันก็นึกภาพออกเหมือนกัน โชคไม่ดีที่ไม่ใช่สิ่งที่เกิดขึ้น :-( การเปลี่ยนแปลงข้อมูลจะทริกเกอร์ฟังก์ชันของฉัน แต่ข้อความ console.log () ไม่ปรากฏในบันทึก Stackdriver ฉันพยายามเพิ่มตัวกระตุ้นการเปลี่ยนแปลง แต่สิ่งนั้นเรียกใช้ฟังก์ชันของฉันโดยไม่มีพารามิเตอร์: - (
Cris70

4

ฉันมีปัญหาเดียวกันฉันพบด้านล่างบนเว็บที่ไหนสักแห่ง ....

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


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

1

มันยังห่างไกลจากความหรูหรา แต่ในขณะที่ดีบักฉันมักจะเข้าสู่ Logger จากนั้นใช้getLog ()เพื่อดึงเนื้อหา จากนั้นฉันก็:

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

โดยพื้นฐานแล้วมันจะกลายเป็นปัญหาเอาต์พุต JavaScript

มันขาดฟังก์ชั่นconsole.log()การใช้งานที่ทันสมัยอย่างสิ้นเชิง แต่ Logger ยังคงช่วยแก้จุดบกพร่องของ Google Scripts


1

เป็นเพียงการแจ้งให้ทราบล่วงหน้า ฉันสร้างฟังก์ชันทดสอบสำหรับสเปรดชีตของฉัน ฉันใช้ตัวแปรที่ google พ่นในฟังก์ชัน onEdit (e) (ฉันเรียกมันว่า e) จากนั้นฉันทำการทดสอบฟังก์ชันดังนี้:

function test(){
var testRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(GetItemInfoSheetName).getRange(2,7)
var testObject = {
    range:testRange,
    value:"someValue"
}
onEdit(testObject)
SpreadsheetApp.getActiveSpreadsheet().getSheetByName(GetItemInfoSheetName).getRange(2,6).setValue(Logger.getLog())
}

การเรียกใช้ฟังก์ชันทดสอบนี้ทำให้โค้ดทั้งหมดทำงานเหมือนที่คุณมีเหตุการณ์ในสเปรดชีต ฉันเพิ่งใส่ความเป็นไปได้ของเซลล์ที่ฉันแก้ไขด้วยวิทช์ให้ผลลัพธ์ที่ไม่คาดคิดโดยตั้งค่าเป็นค่าที่ฉันใส่ลงในเซลล์ OBS! สำหรับตัวแปรเพิ่มเติม googles ให้กับฟังก์ชันไปที่นี่: https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events


0

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

ตัวอย่างเช่นในบล็อกรหัสแรกของคุณ

function setCheckboxes() {

    // Add your spreadsheet data
    var errorSheet = SpreadsheetApp.openById('EnterSpreadSheetIDHere').getSheetByName('EnterSheetNameHere');
    var cell = errorSheet.getRange('A1').offset(errorSheet.getLastRow(),0);

    // existing code
    var checklist = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("checklist");
    var checklist_data_range = checklist.getDataRange();
    var checklist_num_rows = checklist_data_range.getNumRows();

    // existing logger
    Logger.log("checklist num rows: " + checklist_num_rows);

   //We can pass the information to the sheet using cell.setValue()
    cell.setValue(new Date() + "Checklist num rows: " + checklist_num_rows);

เมื่อฉันทำงานกับ GAS ฉันมีจอภาพสองจอ (คุณสามารถใช้สองหน้าต่าง) ตั้งค่าโดยหนึ่งที่มีสภาพแวดล้อม GAS และอีกอันที่มี SS เพื่อให้ฉันสามารถเขียนข้อมูลและบันทึกได้


0

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

throw Error('hello world!');

จะปรากฏในคอนโซลคล้ายกับ console.log('hello world')


0

เพียงแค่ดีบักโค้ดสเปรดชีตของคุณดังนี้:

...
throw whatAmI;
...

แสดงดังนี้:

ใส่คำอธิบายภาพที่นี่


ฉันคิดว่าคุณควรพูดถึงว่าภาพแสดงให้เห็นว่าฟังก์ชันที่กำหนดเองแสดงข้อผิดพลาดอย่างไร แต่ OP ระบุว่าเขาใช้ทริกเกอร์แบบธรรมดา ( onEdit)
Rubén
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.