2017-01-02 4 views
1

Googleスプレッドシート内でカスタム関数を実行しようとしています。私は、コンパイルエラーを得ることはありませんが、私は関数を呼び出すしようとすると、私はメッセージと共に#ERRORを取得し、Google Scripts Error:「ソートを呼び出す権限がありません」

You do not have permission to call sort

は、この問題を回避する方法はありますか? range.sortが利用できない場合、どのようにカスタム関数内の範囲をソートできますか?ここで

は私のコードです:

function installmentPrice(priceRange, measuringPeriod, lowestDays,  discount) 
{ 
    measuringPeriod = measuringPeriod || 5; 
    lowestDays = lowestDays || 1; 
    discount = discount || 1; 

    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var tempRange = sheet.getRange("C3:C9"); 

    var newRange = tempRange.offset(0,0,measuringPeriod); 
    newRange.sort(newRange.getColumn()); 

    Logger.log(newRange.getValues()); 

    var lowestSum = 0; 
    var installmentPx = 0; 

    for (i=0; i<= lowestDays; i++) { 
     lowestSum = lowestSum + newRange[i]; 
    } 

    lowestSum = lowestSum/lowestDays; 
    installmentPx = discount * lowestSum; 
    return installmentPx; 

} 
+0

スクリプトは自分のスプレッドシートで動作します。スプレッドシートへの編集権限がありますか?一つのことを修正したいかもしれません:行 'var sheet = SpreadsheetApp.getActiveSpreadsheet();'はスプレッドシートオブジェクトを変数 'sheet'に割り当てます。これは混乱します(後続の操作がどのシートで実行されるかは不明です)。これはおそらく、 'var sheet = SpreadsheetApp.getActiveSheet();' – FTP

+0

であるべきです:これは、 'sheet.getRange(" C3:C9 ").setValues(" C3:C9 ")。getValues()。sort( )); 'ここでは、C3:C9の範囲で値をソートし、スプレッドシート自体に表示することを前提としています。 –

答えて

1

documentationで指定されているように:

A custom function cannot affect cells other than those it returns a value to. In other words, a custom function cannot edit arbitrary cells, only the cells it is called from and their adjacent cells. To edit arbitrary cells, use a custom menu to run a function instead.

あなたの機能はあなたが上で取得エラーを説明する原点細胞とは異なる範囲を、変更しようとしますnewRangeオブジェクト

関連する問題