25

Google App Script を初めて使用しています。Google Doc スプレッドシートで使用しています。

基本を学ぶためだけに、非常に単純な機能を試しています。たとえば、これは機能します:

function test_hello() {
    return 'hello';
}

しかし、私はこの単純なものに困惑しています:

function test_today() {
    return today();
}

#ERROR!どこでも使えます。そして、カーソルを置くと、次のように表示されます。

エラー: ReferenceError: 「今日」が定義されていません。

スプレッドシートで直接使用すると関数がtoday()機能しますが。

これは、スクリプトではスプレッドシートの組み込み関数を使用できないということですか? これを回避するエレガントな方法はありますか?

一部のスプレッドシート関数は、私にとって非常に便利です (weekday()たとえば、気に入っています)。

洗練されていない方法は、必要な中間値を計算するための列を作成することであり、それはスプレッドシート関数で計算できます。しかし、私はむしろ、この汚くて扱いにくいものを避けたい.

4

3 に答える 3

10

Google Apps Script は JavaScript のサブセットです。現在、スプレッドシート機能はサポートされていません。たとえば、今日の日付を返す関数を作成する場合は、次のように記述します。

function test_today(){
return new Date()
}// note that this will  eventually return a value in milliseconds , you'll have to set the cell format to 'date' or 'time' or both ;-)

構文はシート関数と同じです:=test_today() チュートリアルを参照してください

JavaScript に関するインターネット リソースは数多くありますが、私が見つけた最も有用なものの 1 つはw3school です。

于 2012-07-26T00:22:10.553 に答える
4

Google Apps Script にはまだ (2020 年 1 月 7 日)、Google スプレッドシートのネイティブ関数への API が含まれていません。

ただし、スプレッドシートで名前付き範囲として名前が付けられたセルの数式 (ネイティブ関数) を設定できます。

次にGASで:

var nativeOutput = spreadsheet.getRangeByName("outputCell").getValue();

出来上がり!GAS は、セル内のネイティブ関数を呼び出しています。

他のセルの数式によって参照されるシート (または任意のシート) 内の別のセルに名前を付けることで、GAS からセル内のネイティブ関数にデータを送信できます。

spreadsheet.getRangeByName("inputCell").setValue(inputData);

GAS は、これらのセルをハードコーディングするのではなく、動的に作成できます。たとえば、次のようになります。

// Create native function, its input and output cells; set input value; use native function's output value:


// Use active spreadsheet.
var spreadsheet = SpreadsheetApp.getActive();


// Name input, output cells as ranges.
spreadsheet.setNamedRange("inputCell", spreadsheet.getRange("tuples!F1"));
spreadsheet.setNamedRange("outputCell", spreadsheet.getRange("tuples!F2"));

var outputCell = spreadsheet.getRangeByName("outputCell");
var inputCell = spreadsheet.getRangeByName("inputCell");


// Set native formula that consumes input cell's value, outputting in formula's cell.
outputCell.setFormula("=WEEKNUM(inputCell)");


// Call native function by setting input cell's value for formula to consume.
// Formula sets its cell's value to formula's output value.
inputCell.setValue(15);

// Consume native function output.
var nativeOutput = outputCell.getValue();
Logger.log("nativeOutput: "+ JSON.stringify(nativeOutput)); // Logs "nativeOutput: 3"

注意: この手法では、スプレッドシート ユーザーがアクセス/変更できるセル内のコードが公開され、他のスプレッドシート操作によってこれらのセルが上書きされる可能性があります。

于 2019-02-08T04:54:16.427 に答える
-2

スプレッドシート関数でできること、Javascriptでできること。私はただ置き換える必要がありvar day_num = weekday()ますvar day_num = new Date(date).getDay()

結果は次のとおりです。

/**
* Writes the day of the week (Monday, Tuesday, etc), based on a date
*/
function day_name(date) {
  // calculate day number (between 1 and 7)
  var day_num = new Date(date).getDay();

  // return the corresponding day name
  switch(day_num) {
    case 0: return 'Sunday';    break;
    case 1: return 'Monday';    break;
    case 2: return 'Tuesday';   break;
    case 3: return 'Wednesday'; break;
    case 4: return 'Thursday';  break;
    case 5: return 'Friday';    break;
    case 6: return 'Saturday';  break;
  }
  return 'DEFECT - not a valid day number';
};
于 2012-07-26T10:05:13.073 に答える