سؤال

لديّ جدول بيانات Google حيث أحتفظ بقائمة من الأخطاء ، وكلما قمت بإصلاح خطأ ، أقوم بتغيير الحالة من "لم يتم البدء" إلى "كاملة". أرغب في كتابة برنامج نصي لجدول بيانات مستندات Google ، بحيث يتم تسليط الضوء على الوضع كلما قمت بتغيير الحالة إلى "إكمال" الصف بالكامل بلون معين.

أعلم بالفعل أن جدول بيانات Google يحتوي بالفعل على "تغيير اللون على النص" ، لكن هذه الوظيفة تغير فقط لون الخلية ولا تغير لون الصف بأكمله.

هل كانت مفيدة؟

المحلول

//Sets the row color depending on the value in the "Status" column.
function setRowColors() {
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
  var statusColumnOffset = getStatusColumnOffset();

  for (var i = range.getRow(); i < range.getLastRow(); i++) {
    rowRange = range.offset(i, 0, 1);
    status = rowRange.offset(0, statusColumnOffset).getValue();
    if (status == 'Completed') {
      rowRange.setBackgroundColor("#99CC99");
    } else if (status == 'In Progress') {
      rowRange.setBackgroundColor("#FFDD88");    
    } else if (status == 'Not Started') {
      rowRange.setBackgroundColor("#CC6666");          
    }
  }
}

//Returns the offset value of the column titled "Status"
//(eg, if the 7th column is labeled "Status", this function returns 6)
function getStatusColumnOffset() {
  lastColumn = SpreadsheetApp.getActiveSheet().getLastColumn();
  var range = SpreadsheetApp.getActiveSheet().getRange(1,1,1,lastColumn);

  for (var i = 0; i < range.getLastColumn(); i++) {
    if (range.offset(0, i, 1, 1).getValue() == "Status") {
      return i;
    } 
  }
}

نصائح أخرى

أدرك أن هذا خيط قديم ، ولكن بعد رؤية الكثير من البرامج النصية مثل هذا لاحظت أنه يمكنك القيام بذلك فقط باستخدام التنسيق الشرطي.

على افتراض أن "الحالة" كان العمود د:

تسليط الضوء على الخلايا> النقر بزر الماوس الأيمن> التنسيق الشرطي. حدد "الصيغة المخصصة" وتعيين الصيغة على أنها

=RegExMatch($D2,"Complete")

أو

=OR(RegExMatch($D2,"Complete"),RegExMatch($D2,"complete"))

تحرير (بفضل Frederik Schøning)

=RegExMatch($D2,"(?i)Complete") ثم اضبط النطاق لتغطية جميع الصفوف على سبيل المثال A2:Z10. هذا غير حساس للحالة ، لذلك سوف يتطابق مع كاملة أو كاملة أو كاملة.

يمكنك بعد ذلك إضافة قواعد أخرى لـ "لم تبدأ" وما إلى ذلك. $ مهم للغاية. أنه يدل على إشارة مطلقة. بدونها ، ستنظر الخلية A2 إلى D2 ، لكن B2 ستنظر إلى E2 ، لذلك ستحصل على تنسيق غير متناسق على أي صف معين.

لقد استخدمت نص Genegc ، لكنني وجدت أنه بطيء جدًا.

إنه بطيء لأنه يقوم بمسح ورقة كاملة على كل تعديل.

لذلك كتبت طريقة أسرع وأنظف لنفسي وأردت مشاركتها.

function onEdit(e) {
    if (e) { 
        var ss = e.source.getActiveSheet();
        var r = e.source.getActiveRange(); 

        // If you want to be specific
        // do not work in first row
        // do not work in other sheets except "MySheet"
        if (r.getRow() != 1 && ss.getName() == "MySheet") {

            // E.g. status column is 2nd (B)
            status = ss.getRange(r.getRow(), 2).getValue();

            // Specify the range with which You want to highlight
            // with some reading of API you can easily modify the range selection properties
            // (e.g. to automatically select all columns)
            rowRange = ss.getRange(r.getRow(),1,1,19);

            // This changes font color
            if (status == 'YES') {
                rowRange.setFontColor("#999999");
            } else if (status == 'N/A') {
                rowRange.setFontColor("#999999");
            // DEFAULT
            } else if (status == '') { 
                rowRange.setFontColor("#000000");
            }   
        }
    }
}

إجابة user2532030 هي الإجابة الصحيحة والبسيطة.

أريد فقط أن أضيف ، أنه في الحالة ، حيث لا تكون قيمة الخلية المحددة مناسبة لمباراة regex ، وجدت أن بناء الجملة التالي للعمل على نفس المنوال ، فقط مع القيم العددية ، العلاقات et.c.:

[Custom formula is]
=$B$2:$B = "Complete"
Range: A2:Z1000

إذا كان العمود 2 من أي صف (الصف 2 في البرنامج النصي ، ولكن يعني $ الرائد ، فقد يكون هذا أي صف) يساوي نصًا "كاملًا" ، فافعل x لنطاق الورقة بأكملها (باستثناء صف الرأس (أي بدءًا من A2 بدلاً من A2 بدلاً من A1)).

لكن من الواضح أن هذه الطريقة تسمح أيضًا بالعمليات العددية (على الرغم من أن هذا لا ينطبق على سؤال البروتوكول الاختياري) ، مثل:

=$B$2:$B > $C$2:$C

لذلك ، افعل الأشياء ، إذا كانت قيمة Col B في أي صف أعلى من قيمة Col C.

شيء أخير: على الأرجح ، هذا ينطبق علي فقط ، لكنني كنت غبيًا بما يكفي لأنسى مرارًا وتكرارًا أن أختار صيغة مخصصة في المنسدلة ، تركها في النص يحتوي. من الواضح أن هذا لن يطفو ...

أعتقد أن أبسط (على الرغم من عدم وجود نص) على افتراض Status العمود هو أعمدة.

حدد الأعمدة ومسح التنسيق منه. حدد نطاق كامل ليتم تنسيقه وتنسيقه ، التنسيق الشرطي ... ، تنسيق الخلايا إذا ... Custom formula is و:

=and($S1<>"",search("Complete",$S1)>0)

مع ملء الاختيار و فعله.

هذا ليس حساسا للحالة (التغيير search إلى find لذلك) وسوف يسلط الضوء على صف حيث تحتوي الأعمدة على أمثال Now complete (على الرغم من أيضا Not yet complete).

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