2016-04-06 6 views
1

Bir Google Sayfasında bir kelimeyi vurgulamak için oluşturduğum bu küçük kodla ilgili bir sorunum var.
Bu kod, komut dosyası denetim pencerelerinden başlattığımda mükemmel çalışır ancak komut dosyasını sayfadaki bir hücreden tetiklemeye çalıştığımda çalışmaz.
Bu google e-tablonun sahibiyim. Ben M1 vurgulamak için adını içeren hücreyi olduğunu =SURLIGNER(M1) ile yaprağından senaryoyu tetikleyenGoogle e-tablosundaki bir komut dosyası, komut dosyası kontrol pencerelerinden çalışır, ancak sayfadaki bir tetikleyici tarafından yapılmaz?

function Surligner(nom) { 

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ; 
    var mois = sheet.getRange("A4").getValue().getMonth() ; 
    var listeNbrJours = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) ; 

    // nom = sheet.getRange("M1").getValue() ; 

    sheet.getRange(4, 5, listeNbrJours[mois],9).setBorder(true, true, true, true, true, true, "black", null) ; 
    sheet.getRange(4, 5, listeNbrJours[mois],9).setFontColor("black") ; 

    for (var i=4 ; i<listeNbrJours[mois]+3 ; i++) 
    { 
    for (var j=5 ; j<14 ; j++) 
    { 
     if (sheet.getRange(i,j).getValue().match(nom)) 
     { 
     sheet.getRange(i,j).setBorder(true, true, true, true, true, true, "red", null) ; 
     sheet.getRange(i,j).setFontColor("red") ; 
     } 
    } 
    } 
} 

: İşte kodudur.
mesaj hatası şudur: setBorder aramaya izin verilmez

(hat 9)

sheet

cevap

1

Görünüşe set* işlevleri

çalıştırmak için özel bir işlevi kullanamazsınız

Kaynak: Custom Functions in Google Sheets docs

Elektronik Tablo Salt okunur (çoğu get *() yöntemini kullanabilir, ancak *() ayarlamayın. Bu, işlevin sayfadan çağrılmasının çalışmadığı anlamına gelir.

olası bir çalışma etrafında Sonra pahalı Range.getValue yönteme bağlı sorunlar yaratabilir fakat yine (onEdit olay tetikleyici kullanarak Surligner çalıştırmak bu

nom = sheet.getRange("M1").getValue() ; // I think you thought about it too 

kullanmak olacaktır.