আমি কি গুগল ফর্মের উপর ভিত্তি করে কোনও গুগল স্প্রেডশিটে একটি স্বতঃআগ্রহ ক্ষেত্র যুক্ত করতে পারি?


20

গুগল ফর্মগুলিতে স্প্রেডশিটের পাশাপাশি টাইমস্ট্যাম্পের মধ্যে প্রবেশ করা প্রতিটি সারিটির একটি অনন্য মূল্য দেওয়া কি সম্ভব?


আপনি যখন একটি ফর্ম তৈরি করবেন তখন আফাইক টাইমস্ট্যাম্প স্বয়ংক্রিয়ভাবে যুক্ত হবে is আপনি যখন স্প্রেডশিট কলামগুলির ভিতরে দেখতে পাবেন তখন প্রথমটি সাধারণত টাইমস্ট্যাম্প হয় (আপনি যদি কোনও কারণে এটি মুছে না ফেলে থাকেন এবং যদি আপনি তা করেন তবে আমি সত্যিই জানি না)
রবার্ট কোরিতনিক

আমি অনুমান করছি যেহেতু এই উত্তরটি দেওয়ার পরে কিছু পরিবর্তন হয়েছে কারণ ট্রিগার তৈরি করার পরে এবং স্ক্রিপ্টে কোড যুক্ত করার পরে, ফর্মটি জমা দেওয়ার পরে কিছুই হয় না। গুগল
শেঠের

উত্তর:


11

আপনি স্ক্রিপ্ট ট্রিগার যোগ করে এটি করতে পারেন।

ধরুন আপনার বর্তমান ফর্মটিতে দুটি কলাম 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 মান পরিবর্তন করুন।


এই স্ক্রিপ্টটি ব্যবহার করা কি সম্ভব তবে আমার একটি অনন্য নম্বর প্রয়োজন যাতে আমি যদি কখনও কোনও সারি মুছতে বা যুক্ত করতে পারি তবে এটি উদাহরণস্বরূপ: আমার আইডি বা সারি 1, 2, 3, 4, 5, 6 আছে তবে আমি নিজেই মুছে ফেলব 5 ফর্ম জমা দেওয়ার পরে আইডি 6 লাইন 5 এ স্থানান্তরিত হবে সুতরাং ফর্ম জমা দেওয়ার পরবর্তী আইডিটি আবার 6 হবে আমার নকল হবে have তাহলে কি টাইম স্ট্যাম্পটি ব্যবহার করা এবং এটির বাইরে একটি অনন্য অটো-ইনক্রিমিং নম্বর তৈরি করা সম্ভব?

আরও ভাল, আমি এখন সমস্ত ডেটা দিয়ে নিয়ন্ত্রণ করা ইউআরএলটিতে অনুরোধ করার জন্য এটি ব্যবহার করি এবং এটি সরাসরি আমার অ্যাপ্লিকেশনটিতে রাখি
টবি অ্যালেন

7

ব্যারি দ্বারা দুর্দান্ত উত্তরের জন্য আপনি যদি সারিগুলি সরাতে সক্ষম হন এবং এখনও একটি অনন্য আইডি রাখতে চান তবে আপনার একটি স্ট্যাটিক সেল থাকতে পারে যা একটি গণনা বজায় রাখে। তারপরে আপনি এই নম্বরটি ব্যবহার করতে এবং টেবিলে প্রতিটি নতুন এন্ট্রিতে এটি বাড়িয়ে নিতে পারেন।

সুতরাং পরিবর্তনটি হ'ল আপনার স্প্রেডশিটে কোথাও একটি নম্বর রাখা (নীচের কোডে '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);
}

আবার আপনার আইডিটি কোথায় রাখা হয়েছে তা পরিবর্তন করতে দ্বিতীয় শেষ লাইনটি পরিবর্তন করুন।


আমি এটি প্রয়োগ করেছি তবে ডাটা সারিগুলির মধ্যে সারি মুছে ফেলার ক্ষেত্রে এটি সফল নয়। সুতরাং এটি যখনই সারি মুছে ফেলা হয় তখন লুকানো মান আপডেট করা উচিত

নম্বরটি মুছে ফেলাতে আপডেট করার প্রয়োজন নেই যদি অনন্য আইডি প্রয়োজন হয় (মূল প্রশ্ন অনুসারে)। আপনি যদি মুছে ফেলার মান হ্রাস করেন তবে নকল আইডি পাবেন।
ড্যানি পার্কার

7

পূর্ববর্তী উভয় জবাব (ব্যারি এবং ড্যানি থেকে) উপর বিল্ডিং:

আইডি কলামটি ধরে নিয়েছে কলাম এ। একটি "নেক্সট আইডি" সেলটি চয়ন করুন এবং এটি নিম্নলিখিত সূত্রটিতে সেট করুন (ধরে নিবেন এটি "পি 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);
  }
}

স্ক্রিপ্ট সম্পাদকটিতে "ট্রিগার" মেনু ব্যবহার করে একটি স্ক্রিপ্ট ট্রিগার যুক্ত করুন: এখানে চিত্র বর্ণনা লিখুন


4

উপরের উত্তরগুলিতে আরও - এই সমাধানের জন্য কোনও অতিরিক্ত স্প্রেডশিট সেল প্রয়োজন হয় না।

আপনি অনন্য আইডি পেতে ফর্ম জমা দেওয়ার জন্য ইনবিল্ট ইভেন্ট হ্যান্ডলারগুলি ব্যবহার করতে পারেন। কারণ স্প্রেডশিটটি কেবল ফর্মটির গন্তব্য, একটি সারি মুছে ফেলা আসলে প্রতিক্রিয়া মুছে দেয় না। এটা মাথায় রেখে ...

সম্পাদনা: আইডির প্রয়োজনীয়তা অপসারণ এবং তারিখের ফর্ম্যাটিংয়ের সমস্যাগুলি মোকাবেলা করা হয়েছে।

/**
* 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);
  }

}

আমি এই না। ফর্মটি জমা দেওয়ার পরে এটি কীভাবে ডাকবে?
কোডি বাগস্টাইন

@ ইমরে: আমি মনে করি এটি অবশ্যই স্প্রেডশিটে একটি স্ক্রিপ্ট হতে হবে। ফর্মটি জমা দেওয়ার পরে কোনও ফাংশন চালানোর জন্য আপনি স্প্রেডশিটে একটি ট্রিগার সেট আপ করতে পারেন। আমি যদি এই কাজ করে তবে এই উত্তরে আমি সেই যুক্ত করব (আমার এটি পরীক্ষা করা দরকার)।
গ্যারি এস

1
getUniqueIDফাংশন ব্যাপকভাবে কেবল তারিখ থেকে প্রতিক্রিয়া দৈর্ঘ্য (যে কি এই ফাংশন যুক্তি উপরে বর্ণিত বরং একটি সংবর্ত ফ্যাশন করছে) ফিরে সরলীকৃত করা যেতে পারে। মূলত ফাংশনটির একটি একক লাইন:return getConnectedForm().getResponses().length;
আবিদ এইচ। মুজতবা

2

এটি অন্যান্য উত্তরের একটি ডেরাইভেটিভ তবে এটি ভবিষ্যতের ব্যবহারকারীদের জন্য কার্যকর হতে পারে।

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 কলামটি আপডেট করবে যখন সেই সারিটি সম্পাদিত হবে তবে কেবল যদি সেখানে ইতিমধ্যে কোনও মান নির্দিষ্ট করা থাকে না।

সম্পাদনায় অন্যান্য উত্তরে উল্লিখিত হিসাবে আপনার ট্রিগারটি সেট করা উচিত।

সম্পাদনা ট্রিগার সেট


0

জন্য "গুগল ফর্মের প্রতিটি সারি এবং সেইসাথে টাইমস্ট্যাম্প এটা স্প্রেডশীটে সন্নিবেশ করার জন্য একটি অনন্য মান দিতে এটা কি সম্ভব?" মানগুলি অনুলিপি না করে আরও প্রতিক্রিয়া যুক্ত করার আগে ফর্ম প্রতিক্রিয়াগুলিতে একটি সারি মুছে ফেলার অনুমতি দেওয়ার সময়ও এটি কাজ করা উচিত:

=iferror(ArrayFormula(match(A1:A,A:A,0)),"")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.