سؤال

لديّ وظيفة مخصصة كنصي على جدول بيانات 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)

فقط أعط وظيفة مخصصة الخاص بك معلمة وهمية. لا يفعل أي شيء في الوظيفة المخصصة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top