簡體   English   中英

從 Google 表格中獲取指向單個 Google 表單響應的鏈接

[英]Get a link to an individual Google Forms response from a Google Sheet

我有一個 Google 表單,它輸出對 Google 表格的響應。 我的一些表單問題有很長的段落回復,因此我希望能夠單擊跟蹤表中每一行的鏈接,並打開原始回復頁面,如表單的“回復”選項卡所示。

我試圖生成的 URL 是通過從我的表單轉到響應 -> 個人獲得的,如下所示:

https://docs.google.com/forms/d/<form_id>/edit#response=<response_id>

我查看了FormResponse API 文檔,但無法從FormResponse對象中提取與 Google 表單查看器使用的 ID 相同的 ID。 雖然我知道適當的表單 ID,但對該 URL 有效的響應 ID 與FormResponse.getId()或作為FormResponse.getEditResponseUrl()一部分返回的響應 ID 不同。 換句話說,我無法從生成該鏈接所需的 Forms API 獲取數據。 我寧願不使用他們支持生成的編輯鏈接來查看我的回復。

我的最終目標是在我的回復表單的每一行中都有一個具有上述格式的鏈接。 具有該格式的正確鏈接會將您帶到該行中特定響應的單個響應查看器頁面。 即,我想把這個:

+-----------+------------+
|Question 1 | Question 2 |
+-----------+------------+
|Long answer| Another ans|
+-----------+------------+
|One more an| Additional |
+-----------+------------+

成這個

+-----------+------------+------------------------------------------------------------+
|Question 1 | Question 2 | View link                                                  |
+-----------+------------+------------------------------------------------------------+
|Long answer| Another ans| https://docs.google.com/forms/d/abc123/edit#response=def456|
+-----------+------------+------------------------------------------------------------+
|One more an| Additional | https://docs.google.com/forms/d/abc123/edit#response=ghi789|
+-----------+------------+------------------------------------------------------------+

作為參考,我嘗試將 URL 生成為"https://docs.google.com/forms/d/" + formId + "/edit#response=" + responses[i].getId() ,但是在訪問該 URL 時它說響應 ID 無效。

有沒有辦法通過 Apps 腳本或其他配置在我的輸出表中生成返回每個單獨響應的鏈接?

  • 您希望使用 Google Apps 腳本創建具有以下值的電子表格。

     +-----------+------------+------------------------------------------------------------+ |Question 1 | Question 2 | View link | +-----------+------------+------------------------------------------------------------+ |Long answer| Another ans| https://docs.google.com/forms/d/abc123/edit#response=def456| +-----------+------------+------------------------------------------------------------+ |One more an| Additional | https://docs.google.com/forms/d/abc123/edit#response=ghi789| +-----------+------------+------------------------------------------------------------+
  • 您想查看只讀的響應頁面。

如果我的理解是正確的,那么以下解決方法如何?

問題和解決方法:

  • 不能直接創建每個響應的端點。
  • 檢索toPrefilledUrl()的 URL toPrefilledUrl()可以提交。 所以它不是只讀頁面。

不幸的是,從上述情況來看,需要考慮解決方法。 在這個解決方法中,我使用了toPrefilledUrl()和 Web Apps。 此變通方法的流程如下。

流動:

  1. 通過放置在 ascii 表上方創建電子表格。
    • Web Apps 用作“查看鏈接”的 URL。 並且從toPrefilledUrl()檢索到的 URL 用作查詢參數。
    • 之前部署了 Web Apps。
  2. 當用戶訪問該鏈接時,Web Apps 被打開。
    • 當 Web Apps 運行時,將從toPrefilledUrl()的 URL 中檢索 HTML 數據,並刪除提交按鈕。 然后,打開編輯后的 ​​HTML。

這樣,可以顯示只讀響應。

用法:

要使用此解決方法,請執行以下流程。

1.復制粘貼腳本

請打開您要使用的 Google 表單的腳本編輯器。 並將以下腳本復制並粘貼到腳本編輯器中。

function doGet(e) {
  var url = Utilities.newBlob(Utilities.base64Decode(e.parameter.u)).getDataAsString();
  var html = UrlFetchApp.fetch(url)
    .getBlob()
    .getDataAsString()
    .replace('<span class="quantumWizButtonPaperbuttonLabel exportLabel">Submit</span>', "");
  return HtmlService.createHtmlOutput(html);
}

function myFunction() {
  var webApps = ScriptApp.getService().getUrl();
  var form = FormApp.getActiveForm();
  var items = form.getItems();
  var headers = form.getItems().map(function(e) {return e.getTitle()});
  headers.push("View link");
  var formId = form.getId();
  var responses = form.getResponses();
  var obj = responses.map(function(e, i) {
    var temp = e.getItemResponses().reduce(function(o, f) {
      o[f.getItem().getTitle()] = f.getResponse();
      return o;
    }, {})
    temp["View link"] = "=HYPERLINK(\"" + webApps + "?u=" + Utilities.base64Encode(e.toPrefilledUrl()) + "\", \"response" + (i + 1) + "\")";
    return temp;
  });
  var values = obj.map(function(e) {
    return headers.map(function(f) {
      return f in e ? (typeof e[f] == "object" ? e[f].join(",") : e[f]) : "";
    })
  });
  values.unshift(headers);

  // As a sample, it creates new Spreadsheet and put values.
  var sheet = SpreadsheetApp.create("sampleSpreadsheet").getSheets()[0];
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}

2. 部署 Web 應用程序

  1. 在腳本編輯器上,通過“發布”->“部署為 Web 應用程序”打開一個對話框。
  2. 為“將應用程序執行為:”選擇“用戶訪問 Web 應用程序”“我”。
  3. 為“誰有權訪問應用程序:”選擇“任何人,甚至匿名”。 這是一個測試用例。
    • 如果Only myself ,則只有您可以訪問 Web Apps。 屆時,請使用您的訪問令牌。
  4. 單擊“部署”按鈕作為新的“項目版本”。
  5. 自動打開“需要授權”對話框。
    1. 單擊“查看權限”。
    2. 選擇自己的帳戶。
    3. 在“此應用程序未經驗證”處單擊“高級”。
    4. 點擊“轉到###項目名稱###(不安全)”
    5. 單擊“允許”按鈕。
  6. 單擊“確定”。

3.運行腳本

  1. 運行myFunction() 這樣,就創建了新的電子表格。
  2. 打開創建的電子表格。
  3. 單擊“查看鏈接”單元格。

這樣,Web Apps 就會運行,您可以看到只讀的響應頁面。

筆記:

  1. 當您修改 Web Apps 的腳本時,請將 Web Apps 重新部署為新版本。 這樣,最新的腳本就會反映到 Web Apps 中。 如果即使修改了腳本也不重新部署 Web Apps,則不會使用最新的腳本。 請注意這一點。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM