19

importrange 関数を手動でスプレッドシートに入力すると、ポップアップが表示され、「アクセスを許可」する必要があります。importrange へのアクセスを許可するポップアップ

ただし、スクリプトを使用してこれを行う方法を見つけようとしています。それぞれに query-importrange 関数を使用して多くのスプレッドシートを作成しているためです (インポートするデータがあるスプレッドシートを「所有」しています)。ポップアップを介して手動で「アクセスを許可」し、関数を更新してクエリ関数を含めるには多すぎます。

したがって、ポップアップと同じアクションを実行できるアプリスクリプトで関数呼び出しを探しています。以下のコード セグメントの例。

「アクセスを許可」できる機能を知っている人はいますか? ステファン

// create new spreadsheet file
...
var ss = createSpreadsheet(fileName);
var spreadsheet = SpreadsheetApp.open(ss);
var sheet = spreadsheet.getSheetByName("Sheet1");

// Add student as Viewer
spreadsheet.addViewer(studentEmail);

// Add ImportRange function 
var sheet = spreadsheet.getSheets()[0];
var cell = sheet.getRange("A1");
var filter = "select * where Col3='" + studentEmail + "'";
var qry = '=QUERY(importRange("' + fileKey + '","14-15S2!A1:AE");"' + filter + '";1)';
cell.setValue(qry);
// I need a function to 'allow access' here, so the function can be allowed access. Otherwise, it throws an error.
...
4

5 に答える 5

11

私はこれに似た問題を抱えていましたが、その答えは、データのインポート元であるスプレッドシート ファイルのアクセス許可を変更することであることがわかりました (この例では「ファイルキー」)。

これは、「アクセスを許可」を無効にしたGoogleアプリスクリプトです。

file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW)
于 2015-09-09T08:37:00.803 に答える
11

@Franzi は、文書化されていないアプローチを使用することを提案しました。これは機能し、ドナー/ソース スプレッドシートを公開する必要はありません。Google App Script から実行する方法は次のとおりです。

function addImportrangePermission() {
  // id of the spreadsheet to add permission to import
  const ssId = SpreadsheetApp.getActiveSpreadsheet().getId();

  // donor or source spreadsheet id, you should get it somewhere
  const donorId = '1GrELZHlEKu_QbBVqv...';

  // adding permission by fetching this url
  const url = `https://docs.google.com/spreadsheets/d/${ssId}/externaldata/addimportrangepermissions?donorDocId=${donorId}`;

  const token = ScriptApp.getOAuthToken();

  const params = {
    method: 'post',
    headers: {
      Authorization: 'Bearer ' + token,
    },
    muteHttpExceptions: true
  };
  
  UrlFetchApp.fetch(url, params);
}

通常は必要ありませんが、まれに必要な oauthScopes をappscript.jsonマニフェストに追加したい場合があります。

  ...,
  "oauthScopes": [
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/script.external_request"
  ],
  ...
于 2021-07-23T11:37:34.220 に答える
1

私がしたことは、「ソース」シート (ImportRangeデータを取得するシート) を、組織内で gsheet テンプレートを使用している人々と共有することだけでした。アクセス許可ボタンをクリックしてテンプレートを編集し、それ以降テンプレートから作成したすべてのシートが機能しました。

このImportRange機能は、テンプレートから作成された新しいシートごとにアクセスを再承認する必要なく機能します。私の組織の他の人にも役立つことを願っています。

于 2019-08-20T06:12:54.333 に答える