ঠিক আছে, মনে হচ্ছে আমার সমস্যাটি হ'ল গুগল একটি অদ্ভুত আচরণ করে - এটি স্ক্রিপ্টটি পুনরায় চালায় না যতক্ষণ না স্ক্রিপ্টের প্যারামিটারগুলি সমান হয়, এটি আগের রানগুলি থেকে ক্যাশেড ফলাফল ব্যবহার করে। অতএব এটি এপিআই-তে পুনরায় সংযোগ স্থাপন করে না এবং দামটি পুনরায় আনবে না, এটি কেবল আগের স্ক্রিপ্টের ফলাফলটি ক্যাশে করা হয়েছিল simply
এখানে আরও তথ্য দেখুন: https://code.google.com/p/google-apps-script-issues/issues/detail?id=888
এবং এখানে: ডেটা সংশোধন করার জন্য স্ক্রিপ্ট আপডেট হচ্ছে না
আমার সমাধানটি ছিল আমার স্ক্রিপ্টে অন্য একটি পরামিতি যুক্ত করা, যা আমি এমনকি ব্যবহার করি না। এখন, আপনি যখন পূর্ববর্তী কলগুলির চেয়ে পৃথক কোনও পরামিতি সহ ফাংশনটি কল করবেন তখন এটি স্ক্রিপ্টটি পুনরায় চালু করতে হবে কারণ এই পরামিতিগুলির ফলাফল ক্যাশে থাকবে না।
সুতরাং যখনই আমি ফাংশনটি কল করি, অতিরিক্ত প্যারামিটারের জন্য আমি "$ A $ 1" পাস করি। আমি রিফ্রেশ নামে একটি মেনু আইটেমও তৈরি করেছি এবং আমি এটি চালানোর পরে এটি বর্তমান তারিখ এবং সময়কে A1 তে রাখে, সুতরাং দ্বিতীয় পরামিতি হিসাবে $ A $ 1 সহ স্ক্রিপ্টের সমস্ত কলকে পুনরায় গণনা করতে হবে। আমার স্ক্রিপ্ট থেকে কিছু কোড এখানে দেওয়া হয়েছে:
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Refresh",
functionName : "refreshLastUpdate"
}];
sheet.addMenu("Refresh", entries);
};
function refreshLastUpdate() {
SpreadsheetApp.getActiveSpreadsheet().getRange('A1').setValue(new Date().toTimeString());
}
function getPrice(itemId, datetime) {
var headers =
{
"method" : "get",
"contentType" : "application/json",
headers : {'Cache-Control' : 'max-age=0'}
};
var jsonResponse = UrlFetchApp.fetch("http://someURL?item_id=" + itemId, headers);
var jsonObj = eval( '(' + jsonResponse + ')' );
return jsonObj.Price;
SpreadsheetApp.flush();
}
এবং যখন আমি আইডি 5 সহ আইটেমের দাম কোনও ঘরে রাখতে চাই, আমি নীচের সূত্রটি ব্যবহার করি:
=getPrice(5, $A$1)
আমি যখন দামগুলি রিফ্রেশ করতে চাই, আমি কেবল "রিফ্রেশ" -> "রিফ্রেশ" মেনু আইটেমটিতে ক্লিক করি। মনে রাখবেন onOpen()
স্ক্রিপ্ট পরিবর্তন করার পরে আপনার স্প্রেডশিটটি পুনরায় লোড করা দরকার ।