গুগল ফর্মগুলিতে স্প্রেডশিটের পাশাপাশি টাইমস্ট্যাম্পের মধ্যে প্রবেশ করা প্রতিটি সারিটির একটি অনন্য মূল্য দেওয়া কি সম্ভব?
গুগল ফর্মগুলিতে স্প্রেডশিটের পাশাপাশি টাইমস্ট্যাম্পের মধ্যে প্রবেশ করা প্রতিটি সারিটির একটি অনন্য মূল্য দেওয়া কি সম্ভব?
উত্তর:
আপনি স্ক্রিপ্ট ট্রিগার যোগ করে এটি করতে পারেন।
ধরুন আপনার বর্তমান ফর্মটিতে দুটি কলাম Timestamp
এবং একটি প্রশ্নের উত্তর রয়েছে। সুতরাং আপনার কাছে বর্তমানে কলাম A এবং B তথ্য সহ পপুলেশন রয়েছে। ধরে নেওয়া যাক আপনি কলাম সি চাইছেন যাতে আপনার অটো ইনক্রিমেন্ট নম্বর থাকে।
আপনাকে প্রথমে > এ যেতে হবে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
তারপরে গুগল অ্যাপ স্ক্রিপ্ট উইন্ডোটি সংরক্ষণ এবং বন্ধ করুন।
এখন যখন আপনার ফর্মটি জমা দেওয়া হবে এটি আপনার ফর্মের মাধ্যমে জমা দেওয়া ডেটা সহ কলাম সি-তে সারি সংখ্যাটি তৈরি করবে।
আপনি যে কলামটি সারি নম্বরটি সংরক্ষণ করে তা পরিবর্তন করতে চান আপনাকে স্ক্রিপ্টের এই লাইনটি পরিবর্তন করতে হবে:
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);
}
আবার আপনার আইডিটি কোথায় রাখা হয়েছে তা পরিবর্তন করতে দ্বিতীয় শেষ লাইনটি পরিবর্তন করুন।
পূর্ববর্তী উভয় জবাব (ব্যারি এবং ড্যানি থেকে) উপর বিল্ডিং:
আইডি কলামটি ধরে নিয়েছে কলাম এ। একটি "নেক্সট আইডি" সেলটি চয়ন করুন এবং এটি নিম্নলিখিত সূত্রটিতে সেট করুন (ধরে নিবেন এটি "পি 1" তে রয়েছে):
=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);
}
}
স্ক্রিপ্ট সম্পাদকটিতে "ট্রিগার" মেনু ব্যবহার করে একটি স্ক্রিপ্ট ট্রিগার যুক্ত করুন:
উপরের উত্তরগুলিতে আরও - এই সমাধানের জন্য কোনও অতিরিক্ত স্প্রেডশিট সেল প্রয়োজন হয় না।
আপনি অনন্য আইডি পেতে ফর্ম জমা দেওয়ার জন্য ইনবিল্ট ইভেন্ট হ্যান্ডলারগুলি ব্যবহার করতে পারেন। কারণ স্প্রেডশিটটি কেবল ফর্মটির গন্তব্য, একটি সারি মুছে ফেলা আসলে প্রতিক্রিয়া মুছে দেয় না। এটা মাথায় রেখে ...
সম্পাদনা: আইডির প্রয়োজনীয়তা অপসারণ এবং তারিখের ফর্ম্যাটিংয়ের সমস্যাগুলি মোকাবেলা করা হয়েছে।
/**
* 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 কলামটি আপডেট করবে যখন সেই সারিটি সম্পাদিত হবে তবে কেবল যদি সেখানে ইতিমধ্যে কোনও মান নির্দিষ্ট করা থাকে না।
সম্পাদনায় অন্যান্য উত্তরে উল্লিখিত হিসাবে আপনার ট্রিগারটি সেট করা উচিত।
জন্য "গুগল ফর্মের প্রতিটি সারি এবং সেইসাথে টাইমস্ট্যাম্প এটা স্প্রেডশীটে সন্নিবেশ করার জন্য একটি অনন্য মান দিতে এটা কি সম্ভব?" মানগুলি অনুলিপি না করে আরও প্রতিক্রিয়া যুক্ত করার আগে ফর্ম প্রতিক্রিয়াগুলিতে একটি সারি মুছে ফেলার অনুমতি দেওয়ার সময়ও এটি কাজ করা উচিত:
=iferror(ArrayFormula(match(A1:A,A:A,0)),"")