Google form để cập nhật bảng tính

Chủ sở hữu biểu mẫu có thể cần chỉnh sửa một vài câu trả lời của biểu mẫu trong bảng tính để sửa một số thông tin. Chủ đề này dường như lặp đi lặp lại trong nhiều năm nhưng Google vẫn không hỗ trợ tính năng này. Chúng tôi từng nghĩ rằng bằng cách chỉnh sửa các ô trong bảng tính được liên kết, những phản hồi này cũng sẽ thay đổi. Nhưng tiếc là nó không. Để chỉnh sửa phản hồi thực, bạn cần một liên kết có tên là URL Chỉnh sửa phản hồi biểu mẫu

Hướng dẫn này chỉ cho bạn cách tập lệnh ứng dụng xfanatical được xây dựng có thể cho phép bạn chỉnh sửa phản hồi của biểu mẫu trực tiếp trong bảng tính

Bước 1. Chuẩn bị biểu mẫu và bảng tính của bạn

  • Bạn có một bảng tính được kết nối với biểu mẫu dưới dạng đích phản hồi
Google form để cập nhật bảng tính
  • Bạn đã bật tùy chọn Người trả lời có thể Chỉnh sửa sau khi gửi trong phần Cài đặt của biểu mẫu
Google form để cập nhật bảng tính

Bước 2. Thiết lập Apps Script kỳ diệu trong Bảng tính của bạn

  • Copy apps script ở phần Source code bên dưới
  • Mở bảng tính có liên kết với biểu mẫu
  • Nhấp vào Công cụ trong thanh menu, tiếp theo là Trình chỉnh sửa tập lệnh
Google form để cập nhật bảng tính
trình chỉnh sửa tập lệnh trong bảng tính google
  • Trong tab Script Editor đã xuất hiện
    • Đặt tên cho trình chỉnh sửa tập lệnh, chẳng hạn như Thêm phản hồi biểu mẫu Chỉnh sửa URL
    • Dán mã
    • Nhấp vào để lưu
Google form để cập nhật bảng tính
Thiết lập tập lệnh ứng dụng trong trình chỉnh sửa tập lệnh
  • Bây giờ quay lại tab Bảng tính. Làm mới trang
  • Bạn sẽ thấy một Menu Forms mới > Add Form Response Chỉnh sửa URL ở cuối thanh menu
Google form để cập nhật bảng tính
menu chỉnh sửa phản hồi biểu mẫu

Bước 3. tự động hóa

Thật mệt mỏi khi thiết lập tất cả các phần, phải không? . Nhưng chúng tôi gần như ở đó

  1. Nhấp vào menu Biểu mẫu > Thêm biểu mẫu Chỉnh sửa URL phản hồi
  2. Đợi tập lệnh chạy. Nếu cửa sổ Ủy quyền bật lên, đừng hoảng sợ, hãy xem qua nó. Apps Script an toàn. Ngoài ra, nếu không có gì xảy ra, bạn có thể cần nhấp lại vào menu Biểu mẫu > Thêm biểu mẫu Chỉnh sửa URL phản hồi
  3. Bạn sẽ thấy tập lệnh thêm một cột mới URL Chỉnh sửa phản hồi biểu mẫu ở ngoài cùng bên phải của trang tính (Nếu bạn không thấy nó, hãy cuộn sang phải). Sau đó, nó thêm từng url vào các câu trả lời. Thật tuyệt phải không?
    Nếu trang tính của bạn lớn (hàng nghìn phản hồi) và bạn thấy lỗi Vượt quá mức thực thi tối đa, hãy chạy lại tập lệnh bằng cách nhấp vào menu Biểu mẫu > Thêm biểu mẫu Chỉnh sửa URL phản hồi.
Google form để cập nhật bảng tính
kết quả cuối cùng của việc thêm url chỉnh sửa phản hồi biểu mẫu vào bảng tính
  • THƯỞNG. Bây giờ hãy yêu cầu người trả lời của bạn gửi phản hồi mới. URL Chỉnh sửa Phản hồi Biểu mẫu sẽ được tự động đính kèm vào Bảng tính cho phản hồi mới

Bước 4. Chỉnh sửa câu trả lời trong bảng tính

  • Bây giờ bạn có url chỉnh sửa phản hồi cho mỗi lần gửi, bạn có thể tự do nhấp vào các liên kết đó và thực hiện các thay đổi đối với chúng
  • Những thay đổi sẽ sớm được phản ánh trong bảng tính

báo trước đã biết

Kịch bản không chính xác 100% khi nói đến trường hợp cạnh của các phản hồi liên tiếp. Ví dụ: nếu 4 câu trả lời được ghi lại trong

  • 03/01/2020 10. 30. 04
  • 03/01/2020 10. 30. 04
  • 03/01/2020 10. 30. 05
  • 03/01/2020 10. 30. 05

4 URL chỉnh sửa phản hồi có thể có khả năng gây rối vì dấu thời gian là yếu tố duy nhất khớp phản hồi biểu mẫu với bản ghi trong trang đích. Thêm logic phù hợp của bạn nếu cần thiết

Mã nguồn

/**
 * @license MIT
 * 
 * © 2019-2020 xfanatical.com. All Rights Reserved.
 *
 * @since 1.1.2 interface fix
 * @since 1.1.1 Optimize performance (continued)
 * @since 1.1.0 Optimize performance
 * @since 1.0.0 Add all edit response urls and update new urls for new submissions
 */
function registerNewEditResponseURLTrigger() {
  // check if an existing trigger is set
  var existingTriggerId = PropertiesService.getUserProperties().getProperty('onFormSubmitTriggerID')
  if (existingTriggerId) {
    var foundExistingTrigger = false
    ScriptApp.getProjectTriggers().forEach(function (trigger) {
      if (trigger.getUniqueId() === existingTriggerId) {
        foundExistingTrigger = true
      }
    })
    if (foundExistingTrigger) {
      return
    }
  }

  var trigger = ScriptApp.newTrigger('onFormSubmitEvent')
    .forSpreadsheet(SpreadsheetApp.getActive())
    .onFormSubmit()
    .create()

  PropertiesService.getUserProperties().setProperty('onFormSubmitTriggerID', trigger.getUniqueId())
}

function getTimestampColumn(sheet) {
  for (var i = 1; i <= sheet.getLastColumn(); i += 1) {
    if (sheet.getRange(1, i).getValue() === 'Timestamp') {
      return i
    }
  }
  return 1
}

function getFormResponseEditUrlColumn(sheet) {
  var form = FormApp.openByUrl(sheet.getFormUrl())
  for (var i = 1; i <= sheet.getLastColumn(); i += 1) {
    if (sheet.getRange(1, i).getValue() === 'Form Response Edit URL') {
      return i
    }
  }
  // get the last column at which the url can be placed.
  return Math.max(sheet.getLastColumn() + 1, form.getItems().length + 2)
}

/**
 * params: { sheet, form, formResponse, row }
 */
function addEditResponseURLToSheet(params) {
  if (!params.col) {
    params.col = getFormResponseEditUrlColumn(params.sheet)
  }
  var formResponseEditUrlRange = params.sheet.getRange(params.row, params.col)
  formResponseEditUrlRange.setValue(params.formResponse.getEditResponseUrl())
}


function onOpen() {
  var menu = [{ name: 'Add Form Edit Response URLs', functionName: 'setupFormEditResponseURLs' }]
  SpreadsheetApp.getActive().addMenu('Forms', menu)
}

function setupFormEditResponseURLs() {
  var sheet = SpreadsheetApp.getActiveSheet()
  var spreadsheet = SpreadsheetApp.getActive()
  var formURL = sheet.getFormUrl()
  if (!formURL) {
    SpreadsheetApp.getUi().alert('No Google Form associated with this sheet. Please connect it from your Form.')
    return
  }
  var form = FormApp.openByUrl(formURL)

  // setup the header if not existed
  var headerFormEditResponse = sheet.getRange(1, getFormResponseEditUrlColumn(sheet))
  var title = headerFormEditResponse.getValue()
  if (!title) {
    headerFormEditResponse.setValue('Form Response Edit URL')
  }

  var timestampColumn = getTimestampColumn(sheet)
  var editResponseUrlColumn = getFormResponseEditUrlColumn(sheet)
  
  var timestampRange = sheet.getRange(2, timestampColumn, sheet.getLastRow() - 1, 1)
  var editResponseUrlRange = sheet.getRange(2, editResponseUrlColumn, sheet.getLastRow() - 1, 1)
  if (editResponseUrlRange) {
    var editResponseUrlValues = editResponseUrlRange.getValues()
    var timestampValues = timestampRange.getValues()
    for (var i = 0; i < editResponseUrlValues.length; i += 1) {
      var editResponseUrlValue = editResponseUrlValues[i][0]
      var timestampValue = timestampValues[i][0]
      if (editResponseUrlValue === '') {
        var timestamp = new Date(timestampValue)
        if (timestamp) {
          var formResponse = form.getResponses(timestamp)[0]
          editResponseUrlValues[i][0] = formResponse.getEditResponseUrl()
          var row = i + 2
          if (row % 10 === 0) {
            spreadsheet.toast('processing rows ' + row + ' to ' + (row + 10))
            editResponseUrlRange.setValues(editResponseUrlValues)
            SpreadsheetApp.flush()
          }
        }
      }
    }
    
    editResponseUrlRange.setValues(editResponseUrlValues)
    SpreadsheetApp.flush()
  }

  registerNewEditResponseURLTrigger()
  SpreadsheetApp.getUi().alert('You are all set! Please check the Form Response Edit URL column in this sheet. Future responses will automatically sync the form response edit url.')
}

function onFormSubmitEvent(e) {
  var sheet = e.range.getSheet()
  var form = FormApp.openByUrl(sheet.getFormUrl())
  var formResponse = form.getResponses().pop()
  addEditResponseURLToSheet({
    sheet: sheet,
    form: form,
    formResponse: formResponse,
    row: e.range.getRow(),
  })
}

Lấy đi

Vì bạn sẽ lặp lại biểu mẫu và bảng tính theo thời gian, tập lệnh ứng dụng có thể không xử lý những thay đổi đó và hoạt động không bình thường. Nếu có hãy để lại bình luận bên dưới. Cảm ơn vì đã đọc

Google Biểu mẫu có thể lấy dữ liệu từ bảng tính không?

Bạn cũng có thể nhập dữ liệu từ Google Trang tính để gửi chúng tới Google Biểu mẫu . Mặc dù nó không phải là kết nối gốc, như đã nói ở trên, vì vậy bạn cũng sẽ cần một tiện ích bổ sung tại đây để hoàn thành nhiệm vụ. Trên Google Trang tính, bạn có thể nhận được một số tiện ích bổ sung có thể chuyển đổi bảng tính của bạn thành biểu mẫu.

Bạn có thể chỉnh sửa bảng tính được liên kết với Biểu mẫu Google không?

Google Biểu mẫu không chỉnh sửa dữ liệu trong Google Trang tính , thay vào đó chúng gửi phản hồi. Phản hồi được gửi tới bảng tính Google có thể được cập nhật nhưng phải bật tùy chọn "Cho phép người dùng chỉnh sửa phản hồi".

Bạn có thể liên kết Biểu mẫu Google với trang tính Excel không?

Zapier cho phép bạn tự động gửi thông tin giữa Google Biểu mẫu và Microsoft Excel —không cần mã. Kích hoạt khi nhận được phản hồi biểu mẫu mới. tự động làm điều này.