0

ユーザーは、4 週間ごとに新しいスプレッドシートでスクリプトを承認する必要があります。初めてスプレッドシートを開いたときにすぐに承認ダイアログを呼び出し、スクリプトが既に承認されている場合は呼び出さないでください。

現在のところ、これを行う最も簡単な方法は、空白のシートで [メイン シートに移動] ボタン (つまり、スクリプトが添付された図面) をクリックしてもらうことです。すでに承認されている場合はメインに直接移動しますが、承認されていない場合は承認通知がトリガーされます。この場合、承認後にもう一度 [メイン シートに移動] ボタンをクリックする必要があります。

私はそれが好きではありません、それは不格好です。スクリプトが承認を必要とするかどうかをテストし、onOpen イベントなどからダイアログを直接呼び出す方法はありますか?

4

1 に答える 1

1

これは、単一ユーザーが認証プロセスを単純かつ明確にするための可能なソリューションです。同じスプレッドシートに複数のユーザーがいるため、ユースケースに合わないことはわかっていますが、興味のある部分が含まれている可能性があります.

コードとSS の例を次に示します (編集アクセス権を取得するためにコピーを作成します。一度しか機能しないことを忘れないでください! (少なくとも承認に関する限り、いつでもシートの削除を元に戻すことができます!!) )

function onOpen(){
    if(SpreadsheetApp.getActiveSpreadsheet().getNumSheets()==1){  
var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [{name: "test", functionName: "test"},
                     ];
  ss.addMenu("Recherche",menuEntries);// custom menu
                     }
} // menu appears only if authorization has been processed

function test(){
  if(SpreadsheetApp.getActiveSpreadsheet().getNumSheets()==2){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(ss.getSheets()[0]);// make first sheet active to be sure
  var del = ss.deleteActiveSheet();
  onOpen;
  }
  Logger.log(findThelastRow('d',0))
    }
//
//
    function findThelastRow(column,index){
              var doc = SpreadsheetApp.getActiveSpreadsheet();
              var lastRow = doc.getSheets()[index].getLastRow()+1;// check last row on the appropriate sheet
              var coldata = doc.getSheets()[index].getRange(column+2+':'+column+lastRow).getValues();// I begin on Row 2 just as you did
          for(i=coldata.length-1;i>=0;i--){
             if(coldata[i][0]!=''){return i+2;break}
          }
          return 0;
        }

この例に入れている関数は単なる例です!

重要なのは、認可が行われたときに最初のシートを削除する部分です。これが十分に明確になることを願っています;-)

于 2012-06-28T10:20:24.423 に答える