10

私の質問が別の場所で回答されている場合は申し訳ありません。午後中ずっと Google で回答を探していましたが、まだ初心者です。

Google スプレッドシートのスクリプトを使用して別のスプレッドシートにアクセスしようとしています。私が持っている唯一の情報はスプレッドシートの URL で、そこにはキーと gid があります (マルチシート スプレッドシートの時系列インデックスのようなもの - 私が見つけた唯一の情報はここにあります)。

シートの URL は次のようなものhttps://docs.google.com/spreadsheet/ccc?key=abc123#gid=178 で、リンク先のシートはスプレッドシートの最初のシートです。

に一致するシートを見つけるにはどうすればよいgidですか?

以下は、シートが作成された時間ではなく、シートの順序に基づいているため、機能しません。

var ss = SpreadsheetApp.openById("abc123");

var sheet = ss.getSheets();
Browser.msgBox(sheets[178].getIndex());
4

5 に答える 5

7

私は次のような簡単なことをします:

var refSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET NAME HERE");
var refSheetId = refSheet.getSheetId().toString();

そして、getUrl 文字列の末尾に refSheetId を追加します。

var ssUrl = SpreadsheetApp.getActiveSpreadsheet().getUrl()+"#gid="+refSheetId;

お役に立てれば!

于 2013-02-19T20:04:21.080 に答える
2

私はこれが遅れていることを知っており、元のリクエスタにはもう役に立たないかもしれません. しかし、機能に取り組んでいるときにこの質問を見ましたが、後で自分で解決することになりました。シートを gid で検索でき、シートを削除しても変更されないという事実は良いことです....そのように使用する場合。基本的に、すべてのシートを取得し、gid が一致するまでシート名とシート gid をループしてから、名前でシートを呼び出します。

これは、編集時に集計シートから行を取得し、双方向同期の一部としてサブシートにプッシュするために使用するコードの一部です。gid とキーだけが保存されている場合は、私が示した手順をスキップして、それらの値を参照するだけでかまいません。それは非常に速く動作するようです。分割されたシートを使用してワークブックから実行するよりも複雑なスクリプトですが、両方のスクリプトをプッシュするのにほぼ正確に 2 秒かかります。これは私にとっては許容範囲です。

function Stest() 
 {
  SpreadsheetApp.flush();
  var sheet = SpreadsheetApp.getActiveSheet();
  var r = sheet.getActiveRange();
  var lastColumnRow = sheet.getLastColumn(); 
  var activeRow = r.getRow();
  var dataRange = sheet.getRange(activeRow,1,1,lastColumnRow);  
  var data = dataRange.getValues();

   var sskeytemp = data[0][10].split("=")[1]; //the sheet url is in column k
   var sskey = sskeytemp.split("#")[0]; //these first two steps get the sheet key
   var ssid = data[0][10].split("gid=")[1]; //this last step gets the gid
   var wrkbk = SpreadsheetApp.openById(sskey).getSheets(); //this gets the sheets from the workbook

   for (var i = 0 ; i < wrkbk.length ; i++ ) {
     if( ssid == wrkbk[i].getSheetId() ){ //this is to say if the spreadsheet gid, which is the gid of the sheet i know, matches the gid in the workbook from the link, thats the sheet i'm looking for
     var ssname= wrkbk[i].getName();
     var ss = SpreadsheetApp.openById(sskey).getSheetByName(ssname); //give me that sheet by name

    var sslastColumn = ss.getLastColumn();
    var sslastRow = ss.getLastRow();
    var dataRange = ss.getRange(1,1,sslastRow,sslastColumn);  
    var data2 = dataRange.getValues(); //here's your data range, you can proceed freely from here
于 2012-10-30T19:35:56.817 に答える
0

多くの理由でgidに依存しないことが最善です

  1. 削除されたシートはgetSheets()メソッドには表示されませんが、gidで説明されます。例:

Sheet1を作成します(デフォルトでは、gid#1)

Sheet2を作成する(gid#2)

Sheet2を削除

Sheet3を作成する(gid#3)

  1. ユーザーがスプレッドシートUIでシートを移動することを決定した場合、順序は混乱します。getSheetsは、スプレッドシートに配置されている順序でシートを返します。

シートにたどり着く唯一の方法は、その名前です。または、シートの内容を知っている場合は、各シートを検索できます。

于 2012-09-13T04:39:13.377 に答える