GAS Google Sheet で アクティブなシートを取得に失敗する

8239 단어

作成済みのシートを getActiveSheet で取得に失敗



GAS によって作成してあるシートはアクティブだろうと言う仮説を基に検証

https://tonari-it.com/gas-spreadsheet-object/

この 隣のIT などの多くの記事には

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  console.log(ss.getName());


getActiveSpreadSheet でよしなに最新の? 시트が取れるように書いてあるが

TypeError: Cannot read property 'getName' of null



実行すると中身がないとエラーになってしまう


getName이 아닌 getUrl을 사용하는 경우



https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#create(String)

developer.google.com の公式ページを見てみたが,
記事の情報が古いわけではなく、메솜드は合っていた.

しかし、getActiveSpreadSheet では Drive にあるspreadsheetを開いてくれるわけではないようだ.

// The code below logs the URL for the active spreadsheet.
Logger.log(SpreadsheetApp.getActive().getUrl());


getName がおかしいのかと思い、getUrl も試したけどだめだった


create 直後のシートを getActiveSheet で取得に失敗



前の行で作成した直後のシートならアクティブなシートとして取得できるだろうという仮説のもとに実行

  const brandNewSheet = SpreadsheetApp.create("brandNewSheet")
  const activeSheetName = SpreadsheetApp.getActive().getName()
  Logger(activeSheetName)




ファイルは無事に作成されている.
作成された直後なのでアクティブだろ! と思ったが,

TypeError: Cannot read property 'getName' of null
myFunction @ Code.gs:3



これでも読み取れない.

openById で open し て getActiveSheet で取得に失敗



既に作成してあるファイルも、直前の行で作成したファイルもダメだったが、
open すれば流石にアクティブになるだろうと仮説を立てて実行.

Document の章でやった、DriveApp でファイル名からファylID を取得するやり方で、先ほど作っ한 brandNewSheet は

1SQxrJ0MoC69ExqhiQZtWh7AbFEJ1vZDyYN-QZVdugTw

と言う ID なのを把握できた

  const sheetId = "1SQxrJ0MoC69ExqhiQZtWh7AbFEJ1vZDyYN-QZVdugTw"
  const sheet = SpreadsheetApp.openById(sheetId);
Logger.log(SpreadsheetApp.getActive().getName());



openById で開いて 활성 かどうか確かめるが,

TypeError: Cannot read property 'getName' of null
myFunction  @ Code.gs:4


これでもアクティブなのは取れなかった.

公式ドキュmentの他の getActive 系のメソddを実行しても取得できない





似たような別のなら動くかと仮定して全て試した.しかし全てダメだった.

===

시트(을)를 setActiveSheet로 액티비브를 사용하려면



getActiveSpreadsheet の対になる setActiveSheetをあらかじめ実行すれば
それで動くのでは?と仮定して動かしてみる

  const sheetId = "1SQxrJ0MoC69ExqhiQZtWh7AbFEJ1vZDyYN-QZVdugTw"
  const sheet = SpreadsheetApp.openById(sheetId);
  const activeSheet = SpreadsheetApp.setActiveSheet(sheet);



Exception: The parameters (SpreadsheetApp.Spreadsheet) 
don't match the method signature 
for SpreadsheetApp.setActiveSheet.


시트 を指定してアクティブにすることはできなかった

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#setactivesheetsheet

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[1]);


公式の三プルでは先にアクティブなシートの配列を取ってから
それをさらにアクティブにする?謎の処理をしている

当然自分の環境で実行すると

TypeError: Cannot read property 'getSheets' of null



액티브 なのが何もないEraーになってしまいますね

まとめ



Google 시트 の GAS での操作として、公式や個人브로로그の記事によく出てくる

SpreadsheetApp.getActiveSpreadsheet()


これは
  • GAS で事前に作成済みのシート
  • GAS で前の行で作成直後のシート
  • GAS 에서 공개 시트

  • いずれもアクティブ扱いではないので、取得する ことができない

    Google 문서 と同じように、ID か URL でしか操作ができなそうだ.


    今後



    次回は스크립트파일토시트の紐付けを試みる

    https://www.acrovision.jp/service/gas/?p=237

    acrovision さんの記事によると
    その書 ファイルと紐づいているシートがアクティブという扱いになるらしい

    なので紐付けを試みる.

    좋은 웹페이지 즐겨찾기