2016-04-06 5 views
1

私はGoogleシートで単語を強調表示するために構築したこの小さなコードに問題があります。
このコードは、スクリプトコントロールウィンドウから起動すると完全に機能しますが、シート内のセルからスクリプトをトリガしようとすると機能しません。
私はこのGoogleスプレッドシートの所有者です。ここ は、コードは次のとおりです。Googleスプレッドシートのスクリプトは、スクリプトコントロールウィンドウからは動作しますが、シート内のトリガーからは動作しません。

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") ; 
     } 
    } 
    } 
} 

私はM1を強調するために名前が含まれているセルである=SURLIGNER(M1)のシートからスクリプトをトリガします。
メッセージエラーは、次のとおりです。

あなたがsetBorder(9行目)

sheet

答えて

1

どうやらあなたはset*機能を実行するために、カスタム関数を使用することはできませんを呼び出すことが許可されていません

から引用すると、 Custom Functions in Google Sheets docs

スプレッドシート読み取り専用(ほとんどのget *()メソッドを使用できますが、*()は設定できません)。

これは、シートから関数を呼び出すことができないことを意味します。

一つの可能​​な回避策は、それが高価なRange.getValue方法に起因する問題を作成するかもしれませんが(それがonEditイベントトリガを使用してSurlignerを実行します。

その後、この

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

を使用するようになります

関連する問題