web-dev-qa-db-ja.com

カスタム関数を使用して他のシートから値を取得する

次の関数を定義し、sheet1で使用します。

function  myfcn (sheetname,rowstart,rows,columnstart,rows){
    var sheet= SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname);
    // sheetname is a parameter to my function  
    var range = sheet.getRange(rowstart,columnstart, 1,1);
    var x=range.getFormula();
    return x;
}

Sheet2では、A1には100-B1があります。 D1には= 100-E1があります。 (100の式の場合など)B1には= x + yがあり、E1には= q + pがあります。 x、y、q&pは名前付きの値です。 100-B1は実際にはもっと複雑な数式ですが、例として役立ちます。
必要なのは、A1、D1などのVALUES(sheet2の)など(= A1などを使用)、B1およびE1のFORMULASなどを含む.csvファイル(sheet1から)を作成することです。 myfcn。 .csvファイルは、選択されたビューアー(番号が付けられている)が番号を持つ行のみを見ることができる擬似データベースとして使用されます。視聴者には、数字とそれを作成した式(x + yなど)が表示されます。 x、y、q、pなどの値の単純なリストを含むSEPARATEファイルがあります。

しかし、sheet2の値を変更すると、取得されません。また、関数を使用するsheet1のセルを選択してF2を押すと、Googleはそれが未知の関数であると言います。

何が間違っていますか?

1
DocDJ

カスタム関数は、パラメーターが変更されると再実行されます。たとえば、=myfcn("sheetname", 1, 1, 1, 1)があり、いくつかのパラメーターをここで変更すると、関数が再度実行されます。ただし、セルsheetname!A1の内容を変更すると、関数はnotを再実行します。これは、スプレッドシート内の出力がシート名に依存しているという兆候がないため!A1。

代替案

シートからすべての数式をテキストとして別のシートに取り込むには、次のようなスクリプト関数を使用します。

function copyFormulas() {
  var sheet = SpreadsheetApp.getActiveSheet();
  if (sheet.getName() == 'Watched Sheet') {   
    var data = sheet.getDataRange();
    var target = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Formulas');
    target.getRange(1, 1, data.getHeight(), data.getWidth()).setValues(data.getFormulas());
  }   
}

この関数は、「Watched Sheet」から数式を取得し、テキストとして「Formulas」シートに入れます。このスクリプトは、定期的に、すべての編集、またはすべての変更(行の追加などを含む)で実行できます。 triggers を参照してください。

2
user79865