تحديث الوظيفة المخصصة تلقائيًا
-
26-09-2019 - |
سؤال
لديّ وظيفة مخصصة كنصي على جدول بيانات Google ، والذي يعتمد على قيم بعض الخلايا الأخرى. تعمل بشكل جيد في المرة الأولى التي أضعها فيها في خلية ، ولكن عندما أقوم بتغيير البيانات في الخلايا الأخرى ، تظل كما هي. كيف يمكنني جعل الخلية الأولى تحديث قيمتها تلقائيًا عندما أقوم بتغيير الخلايا الأخرى؟
المحلول
لقد وجدت إجابة لا تجعلني سعيدًا تمامًا ، لكنها جيدة بما يكفي أعتقد. إذا قمت بإضافة وظيفة تسمى onEdit
إلى نص جدول البيانات ، سيتم استدعاؤه في كل مرة يتم فيها تحرير الأشياء. لذلك ، هذا هو الرمز الذي نجح بالنسبة لي: (يحتوي على بعض التفاصيل التي قد تكون مفيدة لذلك تركتها غير محررة)
function onEdit(event) {
if (SpreadsheetApp.getActiveSheet().getName().substr(0,5) == "thing")
SpreadsheetApp.getActiveSheet().getRange("I1").setValue(myCustomFunction());
}
هذا يجعل الأوراق التي يبدأ اسمها thing
, احصل على نتيجة myCustomFunction
في الخلية I1
.
نصائح أخرى
لدي مشكلة مماثلة.
هذه هي الطريقة التي أفعل بها أجهزة الصراف الآلي ، لكنها ليست الحل الأفضل. أنا أبحث عن أفضل.
إذا كانت أي قيمة بأسعار الأوراق وتغير العمود D. بمعنى أنه إذا تغيرت أي قيمة خلية في العمود بأكمله ، فإنه يقوم بتحديث قيمة الوظيفة المخصصة.
//Search Price sheet with the given name. Return price. dummy param updates google ss once the "Prices" sheet values changed.
function searchPrice(price,dummy)
{
var SPREADSHEET_NAME = "Prices";
var SEARCH_COL_IDX = 2;
var RETURN_COL_IDX = 3;
var values = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SPREADSHEET_NAME).getDataRange().getValues();
for (var i = 0; i < values.length; i++)
{
var row = values[i];
if (row[SEARCH_COL_IDX] == price)
{
return row[RETURN_COL_IDX];
}
}
}
هذه هي الطريقة التي تسميها = SearchPrice (B8 ، الأسعار! D: D)
فقط أعط وظيفة مخصصة الخاص بك معلمة وهمية. لا يفعل أي شيء في الوظيفة المخصصة.