แสดง URL ที่ใช้ในการแก้ไขคำตอบจากแบบฟอร์ม Google ใน Google Spreadsheet โดยใช้สคริปต์


11

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

ฉันได้ลองใส่ไว้ในเครื่องมือแก้ไขสคริปต์ใน Google Spreadsheet ที่ฉันต้องการให้ URL ปรากฏ แต่ฉันไม่แน่ใจว่าจะไปจากที่นั่นได้อย่างไร ในเครื่องมือแก้ไขสคริปต์ฉันพยายามทดสอบเป็นส่วนเสริม แต่นั่นไม่ได้ผล

ฉันมีประสบการณ์เล็กน้อยกับสคริปต์และเครื่องมือแก้ไขสคริปต์ใน Google ชีต ในฐานะที่เป็นโน้ตสุดท้ายฉันใช้ Add-on ตัวอื่นที่เรียกว่า AutoCrat ใน Google Spreadsheet เดียวกัน


นอกจากลิงค์ไปยังซอร์สโค้ดของรหัสที่คุณได้ลองแล้วมันก็ดีที่จะรวมโค้ดและขั้นตอนต่าง ๆ ที่ตามมาเพื่อทำการทดสอบของคุณ
Rubén

คำตอบ:


16

คำตอบสั้น ๆ

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

ด้านล่างนี้เป็นสคริปต์ที่ใช้ง่ายกว่า

คำแนะนำ

  1. สร้างแบบทดสอบและจดบันทึกID ของแบบฟอร์ม (ระหว่าง../d/และ/editใน URL) รูปแบบใหม่

  2. ตั้งค่าแบบฟอร์มเพื่อส่งคำตอบไปยังสเปรดชีตใหม่ เชื่อมต่อสเปรดชีต

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

  4. ไปที่Tools > Script editorเพื่อเพิ่มโครงการ Google Apps Script ที่ผูกไว้กับสเปรดชีต สคริปต์สเปรดชีต

  5. แทนที่รหัสเริ่มต้นด้วยรหัสด้านล่าง (อย่าลืมแก้ไขตัวแปรส่วนกลางตามกรณีของคุณ) รหัสสคริปต์

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

  7. ส่งตัวอย่างคำตอบเพื่อทดสอบวิธีแก้ปัญหา

รหัส

/*
 * Global Variables
 */

// Form URL
var formURL = 'https://docs.google.com/forms/d/form-id/viewform';
// Sheet name used as destination of the form responses
var sheetName = 'Form Responses 1';
/*
 * Name of the column to be used to hold the response edit URLs 
 * It should match exactly the header of the related column, 
 * otherwise it will do nothing.
 */
var columnName = 'Edit Url' ;
// Responses starting row
var startRow = 2;

function getEditResponseUrls(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
  var columnIndex = headers[0].indexOf(columnName);
  var data = sheet.getDataRange().getValues();
  var form = FormApp.openByUrl(formURL);
  for(var i = startRow-1; i < data.length; i++) {
    if(data[i][0] != '' && data[i][columnIndex] == '') {
      var timestamp = data[i][0];
      var formSubmitted = form.getResponses(timestamp);
      if(formSubmitted.length < 1) continue;
      var editResponseUrl = formSubmitted[0].getEditResponseUrl();
      sheet.getRange(i+1, columnIndex+1).setValue(editResponseUrl);
    }
  }
}

แหล่งข้อมูลเพิ่มเติม

ฉันสร้างส่วนสำคัญที่มีเนื้อหาจากคำถามและคำตอบ b / c นี้ฉันกำลังสำรวจวิธีการทำงานร่วมกันระหว่างผู้ใช้ปลายทางที่เขียนรหัสได้ดีขึ้น


1
ฉันเข้าใจแล้วมันคือชื่อชีตและฉันก็เอา '/ viewform' ออกที่ท้าย URL ขอบคุณมาก!
ส์

1
@ Rubén - ฉันมีอิสระในการเพิ่มรายละเอียดเล็ก ๆ น้อย ๆ ให้กับการสอนที่ยอดเยี่ยมของคุณเนื่องจากฉันพยายามทำตามขั้นตอนไม่กี่ขั้นตอนที่ฉันทำตามด้วยตัวเอง
Sphinxxx

1
ตกลง. เหตุผลหลักที่ฉันเปลี่ยนรหัสคือเพื่อแสดงให้เห็นว่าคุณสามารถใช้FormApp.openById()กับ ID แบบฟอร์มเท่านั้นแทนที่จะFormApp.openByUrl()เป็น URL ทั้งหมดในกรณีที่รูปแบบ URL ของ Google เปลี่ยนไปในอนาคต ฉันจะแสดงความคิดเห็นในส่วนสำคัญของคุณแทน
Sphinxxx

3
ในหน้าต่างสคริปต์ google ของฉัน "ทริกเกอร์ของโครงการปัจจุบัน" อยู่ใต้ "แก้ไข"
dvb

1
@HoangTrinh ดูcanEditResponse ()
Rubén
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.