โอเคดูเหมือนว่าปัญหาของฉันคือ google ทำงานในลักษณะแปลก ๆ - มันจะไม่เรียกใช้สคริปต์อีกครั้งตราบใดที่พารามิเตอร์สคริปต์คล้ายกัน แต่จะใช้ผลลัพธ์ที่แคชจากการรันก่อนหน้านี้ ดังนั้นจึงไม่เชื่อมต่อกับ API อีกครั้งและไม่เรียกราคาซ้ำ แต่จะส่งคืนผลลัพธ์ของสคริปต์ก่อนหน้านี้ที่แคชไว้
ดูข้อมูลเพิ่มเติมที่นี่: 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();
}
และเมื่อฉันต้องการใส่ราคาของสินค้าที่มี ID 5 ในเซลล์ฉันใช้สูตรต่อไปนี้:
=getPrice(5, $A$1)
เมื่อต้องการรีเฟรชราคาฉันเพียงแค่คลิกรายการเมนู "รีเฟรช" -> "รีเฟรช" โปรดจำไว้ว่าคุณต้องโหลดสเปรดชีตซ้ำหลังจากที่คุณเปลี่ยนonOpen()
สคริปต์