[英]how to update google chart dashboard dynamically when selecting an individual response from a google form response sheet e
[英]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。 此變通方法的流程如下。
toPrefilledUrl()
檢索到的 URL 用作查詢參數。toPrefilledUrl()
的 URL 中檢索 HTML 數據,並刪除提交按鈕。 然后,打開編輯后的 HTML。這樣,可以顯示只讀響應。
要使用此解決方法,請執行以下流程。
請打開您要使用的 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);
}
Only myself
,則只有您可以訪問 Web Apps。 屆時,請使用您的訪問令牌。myFunction()
。 這樣,就創建了新的電子表格。這樣,Web Apps 就會運行,您可以看到只讀的響應頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.