web-dev-qa-db-ja.com

Google Appsスクリプトを使用して別のGoogleスプレッドシートのデータにアクセスする方法を教えてください。

GoogleサイトでGoogle Appsスクリプトを書いていて、Googleスプレッドシートの2つの異なるタブで提供されるデータを使用しようとしています。ドキュメントから理解したと思ったことから、openById()メソッドを使用するだけで、サイトスクリプトのSpreadsheetAppクラスで使用可能なすべてのメソッドを使用できました。

とにかくここは私がやろうとしたことです

function doGet(e) {

    var doc = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE).getActiveSheet();
    SpreadsheetApp.setActiveSheet(doc.getSheetId()[1]);

    //....
}

エラーが出る

メソッドsetActiveSheet(。(行4)が見つかりません

私はこのリンクから作業を引き出しています: Google Spreadsheetsへのデータの保存 と、Building User Interfacesの下にリストされているUi Serviceセクション。

これらの2行で私が間違っていることを見ている人はいますか?

11

setActiveSheetは、UIで表示されるスプレッドシート、つまりブラウザで開いたスプレッドシートのシートでのみ使用する必要があります。

SpreadsheetApp.openByIdを使用すると、スプレッドシートを開いてそのデータにアクセスできますが、ブラウザでは開きません。 UIはありません。

https://developers.google.com/apps-script/class_spreadsheetapp?hl=es-ES#openById でこのコメントを見つけました:

// The code below opens a spreadsheet using it's ID and gets the name for it.
// Note that the spreadsheet is NOT physically opened on the client side.
// It is opened on the server only (for modification by the script).
var ss = SpreadsheetApp.openById("abc1234567");

一部の例では、スクリプトがスプレッドシートで実行されていると想定しています。スクリプトをサービスとして実行しているため、独自のユーザーインターフェイスが必要です。

22

@ megabyte1024は構文エラーに対処すると思いますが、@ YoArgentinaへのコメントに答えて:

スプレッドシート内で実行されていないサービスを介して、さまざまなタブのデータにアクセスする方法を知っていますか?

この種の助けはありますか?

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE);
var sheets = ss.getSheets();
// the variable sheets is an array of Sheet objects
var sheet1A1 = sheets[0].getRange('A1').getValue();
var sheet2A1 = sheets[1].getRange('A1').getValue();
5
AdamL

これらの2行には少なくとも1つの問題があります。 1つ目は、 setActiveSheet メソッドパラメータがSheetクラスオブジェクトであり、getSheetIdメソッドが整数値を返すことです。ちなみに、このメソッド(getSheetId)は ドキュメント化されていません です。 SpreadsheetAppにアクティブなスプレッドシートがない場合、2番目の問題が発生する可能性があります。この場合、「最初にアクティブなスプレッドシートを選択してください」があります。エラー。 SpreadsheetApp.setActiveSpreadsheet メソッドを使用して、アクティブなスプレッドシートを設定します。

1
megabyte1024

各シートに個別にアクセスする必要があります。

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE);
var sheet = ss.getSheets()[0]; // "access data on different tabs"
ss.setActiveSheet(sheet);
0
James Ferreira