質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

1614閲覧

【Apps Script】エラー:Cannot use this operation on a shared drive item.  につきまして

TORUKOSHIGAYA

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2023/02/15 15:46

実現したいこと

  • GoogleDriveの共有ドライブにおいて共有URL一括取得機能を動作するようにする

前提

Drive内のファイル共有用URLを一括取得するScriptを使っています。
マイドライブでは動作するものの、共有ドライブではエラーメッセージが出てしまいます。

共有ドライブを操作するための手続きを検索したところ、
Drive APIの有効化が必要ということでここまでは対応したのですがエラーが解消されず、
対応すべきことをご教示頂けますと幸いです。

発生している問題・エラーメッセージ

下記エラーメッセージが出ます。

Exception: Cannot use this operation on a shared drive item. createSharedUrl @ コード.gs:38

該当のソースコード

javascript

1function createSharedUrl() { 2 //アクティブなシートを取得する 3 var ss = SpreadsheetApp.getActiveSpreadsheet(); 4 var sh = ss.getActiveSheet(); 5 6 //変数folderに指定したフォルダーを格納する 7 //★★★ フォルダーIDを記入 ★★★ 8 var folder = DriveApp.getFolderById("フォルダーID"); 9 10 //フォルダー内の全ファイルを変数folderFilesに格納する 11 //変数folderFiles格納されるデータはイテレーターという形式 12 //※フォルダー直下のファイルのみ格納する 13 var folderFiles = folder.getFiles(); 14 15 //ファイル名を格納するための空の配列を宣言する 16 var allFiles = []; 17 18 //変数folderFilesに格納されている全ファイルのファイル名と 19 //共有リンクを配列allFilesに二次元配列で格納する 20 while(folderFiles.hasNext()) { 21 //配列allFilesに追加する配列(ファイル名と共有リンク)を 22 //ループ中に一時的に格納するための空の配列tempFileを宣言する 23 var tempFile = []; 24 25 //変数folderFilesからファイルのイテレーターをひとつ取り出し 26 //変数fileIteratorに格納する 27 var fileIterator = folderFiles.next(); 28 29 //ファイル名を取得する 30 var fileName = fileIterator.getName(); 31 32 //ファイルIDを取得し、ファイルIDをもとにファイルを 33 //指定し変数fileに格納する 34 var fileId = fileIterator.getId(); 35 var file = DriveApp.getFileById(fileId); 36 37 //変数fileの共有設定を「リンクを知っている全員が閲覧化」に変更する 38 file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); 39 40 //共有リンクを変数shareUrlに格納する 41 var shareUrl = file.getUrl(); 42 43 //配列tempFileにファイル名と共有リンクを格納する 44 //この時点で配列tempFileは以下のようになっている 45 //tempFile = [ファイル名, 共有リンク] 46 tempFile.push(fileName); 47 tempFile.push(shareUrl); 48 49 //配列tempFileを配列allFilesに格納する 50 //配列の中に配列を入れるのでallFilesは 51 //以下のような二次元配列になる 52 //allFiles = [[ファイル名1, 共有リンク1],[ファイル名2,共有リンク2],....] 53 allFiles.push(tempFile); 54 } 55 56 //配列allFiles内の要素数、つまり必要な行数を確認する 57 var numRow = allFiles.length; 58 59 //配列allFiles内の一つ目レコードの要素数、つまり必要な列数を確認する 60 //今回はレコードの要素は「ファイル名」と「共有リンク」なので2になる 61 var numCol = allFiles[0].length; 62 63 //アクティブなシートの2行目にペースト 64 sh.getRange(2,1, numRow, numCol).setValues(allFiles);

試したこと

Drive APIの有効化

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「リンクを知っている全員が閲覧化」の設定が組織で禁止されていませんか?
手動で変更できるか確認してみてください。

投稿2023/02/15 23:03

macaron_xxx

総合スコア3191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TORUKOSHIGAYA

2023/02/17 04:31

こんにちは。回答誠にありがとうございました。 設定を確認しましたが、フォルダの設定は「リンクを知っている全員が閲覧化」となっておりました。 他に考えられる要因はございますでしょうか。 お手数をおかけしており恐縮ですがどうぞよろしくお願いいたします。
TORUKOSHIGAYA

2023/02/17 04:55

chatgptにエラー内容の質問をしたところ下記の回答が返ってきました。 ------------------------------------ エラーメッセージ "Exception: Cannot use this operation on a shared drive item" は、共有ドライブに属するファイルに対して setSharing() メソッドを使用できないことを示します。setSharing()メソッドは、Google Driveの「マイドライブ」にあるファイルに対してのみ使用可能です。 この問題を解決するには、Drive APIを使用してShared Driveにあるファイルにアクセスし、 Drive APIのPermissions.create()メソッドを使用して共有許可を設定するようにスクリプトを変更します。これにより、Shared Driveに属するファイルに共有権限を設定することができます。 ------------------------------------ この場合どのような設定をすればよろしいでしょうか。 コードのことについて疎く大変ご迷惑をおかけしております。 何かご存知のことがございましたらご教示頂けますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問