क्या Google फ़ॉर्म में स्प्रेडशीट और टाइमस्टैम्प में सम्मिलित प्रत्येक पंक्ति को एक विशिष्ट मूल्य देना संभव है?
क्या Google फ़ॉर्म में स्प्रेडशीट और टाइमस्टैम्प में सम्मिलित प्रत्येक पंक्ति को एक विशिष्ट मूल्य देना संभव है?
जवाबों:
आप एक स्क्रिप्ट ट्रिगर जोड़कर ऐसा कर सकते हैं।
मान लें कि आपके वर्तमान फ़ॉर्म में दो कॉलम हैं Timestamp
और एक प्रश्न का उत्तर है। इसलिए आपके पास वर्तमान में डेटा के साथ ए और बी पॉपिंग कॉलम हैं। मान लें कि आप कॉलम C चाहते हैं कि आपके पास स्वतः वृद्धि संख्या है।
आपको सबसे पहले > के पास जाना होगाTools
Script Editor
स्क्रिप्ट एडिटर विंडो में निम्नलिखित स्क्रिप्ट दर्ज करें:
function onFormSubmit(e) {
var sheet = SpreadsheetApp.getActiveSheet();
var row = SpreadsheetApp.getActiveSheet().getLastRow();
sheet.getRange(row,3).setValue(row);
}
स्क्रिप्ट को सहेजें और फिर Triggers
मेनू पर जाएं और चुनेंCurrent script's triggers
निम्नानुसार ड्रॉप डाउन को आबाद करें:
क्लिक करें Save
फिर Google ऐप स्क्रिप्ट विंडो को सहेजें और बंद करें।
अब जब आपका फॉर्म सबमिट किया जाता है तो यह आपके डेटा के साथ कॉलम सी में पंक्ति संख्या को जमा करेगा जो आपके फॉर्म के माध्यम से सबमिट किया गया है।
आप उस पंक्ति को बदलना चाहते हैं जिसे पंक्ति संख्या में सहेजा गया है, आपको स्क्रिप्ट की इस पंक्ति को बदलने की आवश्यकता है:
sheet.getRange(row,3).setValue(row);
और मान 3 को संबंधित कॉलम इंडेक्स संख्या में बदलें।
बैरी द्वारा उत्कृष्ट जवाब के आगे, यदि आप पंक्तियों को हटाने में सक्षम होना चाहते हैं, और अभी भी एक अद्वितीय आईडी रखते हैं तो आपके पास एक स्थिर सेल हो सकता है जो एक गिनती बनाए रखता है। फिर आप इस नंबर का उपयोग कर सकते हैं और इसे टेबल पर हर नई प्रविष्टि पर बढ़ा सकते हैं।
इसलिए संशोधन आपकी स्प्रैडशीट (नीचे दिए गए कोड में 'M1') पर एक संख्या रखने के लिए होगा और इसको देखने के लिए कोड को संशोधित करेगा:
function onFormSubmit(e)
{
var sheet = SpreadsheetApp.getActiveSheet();
var row = SpreadsheetApp.getActiveSheet().getLastRow();
var bugCount = sheet.getRange("M1").getValue();
bugCount++;
sheet.getRange(row,1).setValue(bugCount);
sheet.getRange("M1").setValue(bugCount);
}
फिर, दूसरी अंतिम पंक्ति को बदलने के लिए जहां आपकी आईडी रखी गई है।
पिछले उत्तर (बैरी और डैनी दोनों) पर निर्माण:
मान लें कि आईडी कॉलम कॉलम ए है। "नेक्स्ट आईडी" सेल चुनें और इसे निम्न फॉर्मूले पर सेट करें (यह मानते हुए कि यह "P1" में है):
=MAX(A:A)+1
"टूल" मेनू के तहत स्क्रिप्ट एडिटर का उपयोग करके स्क्रिप्ट बनाएं, और निम्नलिखित में पेस्ट करें:
function onFormSubmit(e) {
// Get the active sheet
var sheet = SpreadsheetApp.getActiveSheet();
// Get the active row
var row = sheet.getActiveCell().getRowIndex();
// Get the next ID value. NOTE: This cell should be set to: =MAX(A:A)+1
var id = sheet.getRange("P1").getValue();
// Check of ID column is empty
if (sheet.getRange(row, 1).getValue() == "") {
// Set new ID value
sheet.getRange(row, 1).setValue(id);
}
}
स्क्रिप्ट एडिटर में "ट्रिगर" मेनू का उपयोग करके एक स्क्रिप्ट ट्रिगर जोड़ें:
उपरोक्त उत्तरों के आगे - इस समाधान के लिए एक अतिरिक्त स्प्रेडशीट सेल की आवश्यकता नहीं है।
आप एक अद्वितीय आईडी प्राप्त करने के लिए फॉर्म जमा करने के लिए इनबिल्ट इवेंट हैंडलर का उपयोग कर सकते हैं। क्योंकि स्प्रेडशीट फ़ॉर्म के लिए सिर्फ गंतव्य है, एक पंक्ति को हटाने से वास्तव में प्रतिक्रिया नष्ट नहीं होती है। ये ध्यान रखते हुए...
EDIT: आईडी की आवश्यकता को हटा दिया गया और दिनांक स्वरूपण मुद्दों से निपटा गया।
/**
* This function extracts the relevant properties from the event handler,
* then uses them to get the uniqueID and record the response
* @param {Object} e The event parameter for form submission to a spreadsheet;
* e has the following properties values, range, namedValues
*/
function onFormSubmit(e) {
var uniqueID = getUniqueID(e.values);
recordResponseID(e.range, uniqueID);
}
/**
* Records the unique ID for this response to the correct cell.
* @param {Object} eventRange Range in which the response is written
* @param {Integer} uniqueID Unique id for this range
*/
function recordResponseID(eventRange, uniqueID) {
var row = eventRange.getRow();
var column = eventRange.getLastColumn() + 1;
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(row, column).setValue(uniqueID);
}
/**
* A shortcut function to get the form that is connected to this spreadsheet
* @return {Form} The form associated with this spreadsheet.
**/
function getConnectedForm() {
var formUrl = SpreadsheetApp.getActiveSpreadsheet().getFormUrl();
var form = FormApp.openByUrl(formUrl);
return form;
}
/**
* Returns a unique ID for the response, by finding the actual Response that
* has the same properties.
* @param {Array} eventValues Array of: Timestamp_string, form_response_value...
* @return {Integer} The unique id (by 1 based array position) of the Response
*/
function getUniqueID(eventValues) {
var isMatch = false;
var eventItems = eventValues.slice(1);
var responses = getConnectedForm().getResponses();
//loop backwards through responses (latest is most likely)
for (var i = responses.length - 1; i > -1; i--) {
var responseItems = responses[i].getItemResponses();
//check each value matches
for (var j = 0; j < responseItems.length; j++) {
if (responseItems[j].getResponse() !== eventItems[j]) {
break;
}
isMatch = true;
}
if (isMatch) {
return i + 1;
}
}
}
function testOnSubmit() {
var answers = [
["Sue", "39", "Okay I suppose"],
["John", "22", "Great"],
["Jane", "45", "yeah no"],
["Bob", "33", "Super"]
];
var form = getConnectedForm();
var items = form.getItems();
for (var i = 0; i < answers.length; i++) {
var formResponse = form.createResponse();
for (var j = 0; j < items.length; j++) {
var item = items[j];
var itemResponse = item.asTextItem().createResponse(answers[i][j]);
formResponse.withItemResponse(itemResponse);
}
formResponse.submit();
Utilities.sleep(500);
}
}
getUniqueID
समारोह बहुत बस तारीख करने के लिए प्रतिक्रियाओं की लंबाई (है कि क्या इस समारोह के तर्क ऊपर वर्णित एक नहीं बल्कि घुमावदार फैशन में क्या कर रहा है) वापस लौट कर सरल किया जा सकता। मूल रूप से फ़ंक्शन में एक एकल लाइन:return getConnectedForm().getResponses().length;
यह अन्य उत्तरों का व्युत्पन्न है, लेकिन यह भविष्य के उपयोगकर्ताओं के लिए उपयोगी हो सकता है।
function onEdit(e)
{
var sheet = SpreadsheetApp.getActiveSheet();
var row = SpreadsheetApp.getActiveSheet().getActiveCell().getRow();
var bugCount = sheet.getRange("M2").getValue();
bugCount++;
if (sheet.getRange(row, 1).getValue() == "") {
sheet.getRange(row,1).setValue(bugCount);
sheet.getRange("M2").setValue(bugCount);
}
}
मुख्य अंतर यह है कि सक्रिय पंक्ति में कॉलम 1 को अपडेट किया जाएगा जब उस पंक्ति को संपादित किया जाता है, लेकिन केवल अगर पहले से ही निर्दिष्ट मूल्य नहीं है।
आपको संपादन पर अन्य उत्तरों में उल्लिखित ट्रिगर सेट करना चाहिए।
के लिए "Google फ़ॉर्म में प्रत्येक पंक्ति के साथ-साथ टाइमस्टैम्प यह स्प्रेडशीट में सम्मिलित करता है के लिए एक अनूठा मूल्य देने के लिए यह संभव है?" मूल्यों को दोहराए बिना आगे प्रतिक्रिया के अलावा फॉर्म प्रतिक्रिया पत्रक में एक पंक्ति को हटाने की अनुमति देते समय, यह काम करना चाहिए:
=iferror(ArrayFormula(match(A1:A,A:A,0)),"")