0

私はこれを理解するのに苦労しています。あるワークシートからデータを抽出して、別の Google スプレッドシートにコピーしたいと考えています。まず、getvalues を使用しようとするとエラーが発生しますが、これは以前には発生していませんでした。また、「type」変数に setValue を使用しようとすると、エラーが発生します。「sourceCC」からデータを取得し、「destSS」のさまざまなセルに入れようとしています。どんな助けでも大歓迎です。

function sendData() {

  var sourceSS = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = sourceSS.getSheetByName("Data");
  var dataLastRow = dataSheet.getLastRow();
  var dataValues = dataLastRow.getRange("A"+(dataLastRow)+":G"+(dataLastRow)).getValues();

  var emailSheet = sourceSS.getSheetByName('Emails');
  var recipient = emailSheet.getRange('B2:B22').getValues();
  var orgUnit = emailSheet.getRange('A2:A22').getValues();


  var destSS = SpreadsheetApp.openById('SHEETID');
  var destSheet = destSS.getSheetByName('Sheet1');
  var destLastRow = destSheet.getLastRow();
  var type = destLastRow[0].setValue('NEW');
  var ID = destLastRow[1];

}
4

1 に答える 1

4

Javascript (したがって Google Apps Script) では、ターゲット オブジェクトがそのメソッドを「持っている」場合にのみメソッドを呼び出すことができます。一部のオブジェクトを混同しているため、エラーが発生しています。オブジェクト タイプは、使用しているメソッドをサポートしていません。(セルジュのコメントに同意!)

あなたが持っているエラーは次のとおりです。

  1. コードの 3 行目でdataLastRow = dataSheet.getLastRow()Number を生成し、次に を試しdataLastRow.getRange()ます。ただし、.getRange()メソッドSheetです。

  2. 後で、destLastRow = destSheet.getLastRow()別の数値を生成します。次の行には 2 つのエラーがあります。1 つ目は、この Number が配列として扱われることdestLastRow[0]です。

  3. その行の 2 番目のエラーはRange.setValue()、未定義の値を呼び出しています。(配列のインデックスが正しくないため未定義です。)

  4. そのすぐ下で、var ID = destLastRow[1]エラー #2 が繰り返されます。

この編集版では、これらのエラーが削除されています。ロジックに他のエラーがある可能性があり、確かに完全ではありませんが、実行されます。各ステートメントで返されるオブジェクトの種類を示すコメントが追加されました。

function sendData() {

  var sourceSS = SpreadsheetApp.getActiveSpreadsheet();      //= Spreadsheet
  var dataSheet = sourceSS.getSheetByName("Data");           //= Sheet
  var dataLastRow = dataSheet.getLastRow();                  //= Number
  var dataValues = dataSheet.getRange("A"+(dataLastRow)+":G"+(dataLastRow)).getValues();
                                                             //= Array [[]]

  var emailSheet = sourceSS.getSheetByName('Emails');        //= Sheet
  var recipient = emailSheet.getRange('B2:B22').getValues(); //= Array [[]]
  var orgUnit = emailSheet.getRange('A2:A22').getValues();   //= Array [[]]

  var destSS = SpreadsheetApp.openById('SHEETID');           //= Spreadsheet
  var destSheet = destSS.getSheetByName('Sheet1');           //= Sheet
  var destLastRow = destSheet.getLastRow();                  //= Number
  var type = destSheet.getRange(destLastRow, 0);             //= Range
  type.setValue('NEW');                                      //= Range (for chaining)
  var ID = destSheet.getRange(destLastRow, 1);               //= Range

}

欠陥除去ツールとしてのオートコンプリート

このような状況では、Apps Script Editor のオートコンプリート機能が役に立ちます。エディターは、対象のオブジェクト タイプを判別できると、サポートされているメソッドのリストを提供します。入力を開始すると、次のように表示されますvar dataValues = dataSheet.getR...

オートコンプリート付きのスクリーンショット

と入力するとすぐ.に、エディターはメソッドの長いリストを提供しました。入力する文字が増えるにつれて、リストは短くなり、この時点でさまざまなSheet.getRange()メソッドが表示されます。

一方、次のように入力すると、次のようになりますvar dataValues = dataLastRow.

ここに画像の説明を入力

あまりない。エディターには、このタイプに対して提供するオートコンプリート メソッドがありませんNumber。編集時にこの動作に慣れていれば、後で PITA 要因が高くなる可能性のある多くの単純なミスを回避できます。

于 2013-08-02T02:15:14.363 に答える