1

同じドメインに属していないユーザー間でGoogleスプレッドシートファイルのコピーを作成したいと思います。ソースファイルの共有設定、リンクを知っている人なら誰でも編集できます。インストール関数を呼び出すWebアプリ(実行権限がWebアプリにアクセスするユーザーに設定されている)を作成しました。

コードがすべての人に公開されているソースファイルを読み取り、Webアプリを実行しているユーザーのGoogleドライブにローカルコピーを作成することを望んでいました(もちろん、ユーザーがスクリプトの実行を受け入れることを前提としています)。この動作は、私が実行しているときは機能しますが(私はソースの所有者であるため)、ユーザーが別のドメインのユーザーである場合は機能しません。

これを達成する方法について何か提案はありますか?

function doInstall() {
// The source file is readable by everybody with the link;
  var file = DocsList.getFileById('0AlVPTKz1xoevdHc1ZTQ2OGFMXXXXXXXYYYYZZZZ');
  file.makeCopy('Test Copy Spreadsheet');
}
4

1 に答える 1

0

私は、異なるが同様のユースケースと問題を抱えていました。あなたと同じように、リンクを知っていれば誰でも私のソース ファイルにアクセスでき、私のドメイン設定では、ユーザーが私のドメイン外でコンテンツを共有できるようにしていました。それは私にとってはうまくいきましたが、彼らにとってはうまくいきませんでした。

これはあなたのために働くかもしれません、それは私のために持っています(これまでのところ):

元のスクリプトがあると仮定して...

  1. 「Script as web app」用に別のスクリプトを作成します。
  2. ScriptDb を使用して必要な fileId を格納する関数 (例: loadFileIds()) を記述します。loadFileIds() 関数を実行します。
  3. 呼び出されたときに ScriptDb.getMyDb から目的のファイル ID を返す別の関数 (getFileId() など) を同じプロジェクトに記述します。この関数で DocsList を使用しないでください。getFileId() は「私として実行」されるので問題ないと最初は思っていましたが、他のユーザーがスクリプトをトリガーしたときに失敗を引き起こしたのは常に DocsList 行でした。
  4. [ファイル] > [バージョンの管理] で: プロジェクトのバージョンを保存します。
  5. [発行] の下: プロジェクトのそのバージョンを Web アプリとしてデプロイします。[Execute the app as " me(me@mydomain.com) "] を選択し、[Who has access to web app] を [ Anyone ] に設定します。
  6. 元のプロジェクトで、[リソースの管理] に移動し、Web アプリのプロジェクト キーを入力し、バージョンを選択して識別子をコピーします。
  7. yourIdentifier.getFileId() を呼び出す関数を作成し、できれば fileId を返します。

これまでの私の経験では、外部ユーザーは、DocsList メソッドが null を返したときにはアクセスできなかったファイルにアクセスできました。しかし、もう 1 つ追加する必要があります... Web アプリ スクリプトをユーザーと共有する必要がある場合があります。それが必要かどうかはまだはっきりしていませんが、そうでないときにバグに遭遇したことがあります。リンクをメールで送信するオプションのチェックを外します。

ドキュメントこのビデオ、そしてもちろん StackOverflow の例からこれを行う方法を学びました。

ご覧のとおり、私はまだこれを自分で解決しており、システムのテストはこれまでのところ、他のユーザーをシミュレートするだけです。だから約束はありません。幸運を!問題にスターを付けます。

于 2012-11-01T03:44:12.747 に答える