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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

1155閲覧

google apps scriptによる自動フォルダ作成について

nxm83521

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2021/08/03 06:17

編集2021/08/03 11:11

google apps scriptによる自動フォルダ作成について

エラーが出たりでなかったり、現在はエラーが逆に出ない状態なので、何がどうなっているのか、不明な状態です。
ソースコードに問題があると思われますが思い浮かびません。

google apps scriptを用いた自動化作業を作成しています。
作業は、スプレッドシートに入力したデータを基に、新たにフォルダを作成するというものです。
既に親フォルダ、子フォルダのセットがあります。
そこに、必要に応じて特定の子フォルダの中に孫フォルダ及び孫フォルダ下に作業フォルダを作成したい考えです。
作成したいフォルダの図イメージを以下に記載します。

イメージ説明

フォルダ作成にあたり、スプレッドシートの表から以下条件で作成を行う考えです。
1、A列にチェックが入っているものにおいてフォルダ作成作業を行わせる。
2、以下画像のD列にフォルダIDを記載しておき、D列フォルダIDを読んで、その場所で3の作業を行う。
3、作成するフォルダ(案件フォルダ)はスプレッドシート表のB列;_+C列とし、そのフォルダ下に任意の名前のフォルダ(作業フォルダ1、作業フォルダ2、作業フォルダ3、・・・作業フォルダ9)を作成する。

※以下イメージ
イメージ説明

上記作業を行うにあたり、2つのサイトを参考に作業を行っています。
https://ginneko-atelier.com/blogs/entry470/
https://www.terakoya.work/google-apps-script-folder-control/

該当のソースコード

google apps script

ソースコード
function createProject1() {
}
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('test');
var value = sheet.getDataRange().getValues();
for(let i = 1; i<=last; i++){
if(sheet.getRange(i, 1).getValue()=== true) {
const folder_id = sheet.getRange(2,5).getValue();
var folder = DriveApp.getFolderById(folder_id)
const name = sheet.getRange(2, 2).getValue() + "_" + sheet.getRange(2, 3).getValue()
var folder = DriveApp.createFolder(name);
var args1 = ["abc-1","abc-2"];
var folder1 = [];
}}

エラー内容

現在、エラーは出ていませんが、逆に何もフォルダが作成されません。
エラーも出ないので何もしようがない状態です。

※試しに特定のフォルダIDを指定して作業した結果・・・何もエラーは置きませんが、実際にあるフォルダIDの場所には何もフォルダが作成されていませんでした。
function createProject() {
}
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('test');
var folder = DriveApp.getFolderById(”フォルダID・・・”)
const name = sheet.getRange(2, 2).getValue() + "_" + sheet.getRange(2, 3).getValue()
var folder = DriveApp.createFolder(name);
var args1 = ["abc-1","abc-2"];
var folder1 = [];

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

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

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

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

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

y_waiwai

2021/08/03 07:13

で、しつもんはなんでしょうか
nxm83521

2021/08/03 07:18

コメントありがとうございます。 失礼しました。 その部分が抜けておりました。 何をどう修正したら記載事項を上手くやることができるのでしょうか、というのが質問です。
y_waiwai

2021/08/03 07:22

どういうふうにうまくできないんでしょうか。 そこらへんの説明がないと答えようもないです。 追記修正は、質問文を編集して行いましょう
y_waiwai

2021/08/03 07:25

> 色々とエラーで動いてくれず エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、いらぬ翻訳省略しないで、出たそのママをコピペで提示してください
nxm83521

2021/08/03 07:53

現在のソースコードではエラーが出ていませんが、逆に指定したフォルダID下には何も起こっていない状態です。 ソースコードのどこかに間違いがあると思いますがエラーにならないために把握ができていません。 初歩的な質問で申し訳ありません。
guest

回答2

0

ベストアンサー

var value = sheet.getDataRange().getValues(); if (value[1][1] === true) {

ここですが、value[1][1]は2行目2列目のセル(セルB2)の値になっているので、trueと一致しません。
このため、フォルダが生成されないのだと思われます。
CHERRYさん御指摘の通り、DriveApp.createFolder~としているので、指定したフォルダIDではなく、ドライブのルートフォルダに生成されてしまっているものと思われます。
(指定したフォルダー下に生成したい場合は、
「生成元の親フォルダーオブジェクト.createFolder(~)」とする必要あり。


質問文記載のコード後半ではシートの行・列を指定してgetValue()を使用されていることから、
いっそ最初からgetValue()を使われた方が、行・列の対応が分かりやすいと思いますので、下記のようなコードにしてみました。

js

1function createProject() { 2 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 const sheet = spreadsheet.getSheetByName('test'); 4 const lastrow = sheet.getLastRow() 5 // 2行目からデータのある行の最後まで繰り返す。 6 for (let i = 2; i <= lastrow; i++) { 7 // 1、A列にチェックが入っているものにおいてフォルダ作成作業を行わせる。 8 if (sheet.getRange(i, 1).getValue() === true) { 9 // 2、フォルダID列(質問文中の画像ではE列)内のフォルダIDを読んで、その場所で3の作業を行う。 10 const folder_id = sheet.getRange(i, 5).getValue(); 11 const folder = DriveApp.getFolderById(folder_id) 12 // 3、作成するフォルダ(案件フォルダ)はスプレッドシート表のB列+_+C列とする。 13 const name = sheet.getRange(i, 2).getValue() + "_" + sheet.getRange(i, 3).getValue(); 14 // そのフォルダ下に任意の名前のフォルダ(作業フォルダ1、作業フォルダ2、・・・)を作成する。 15 const subfolder = folder.createFolder(name); 16 const args1 = ["作業フォルダ1", "作業フォルダ2"]; 17 for (const arg of args1) { 18 subfolder.createFolder(arg); 19 } 20 } 21 } 22}

getValuesで値を一括取得する場合は下記のようなコードになります。

js

1function createProject2() { 2 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 const sheet = spreadsheet.getSheetByName('test'); 4 const rows = sheet.getDataRange().getValues(); 5 for (const row of rows) { 6 if (row[0] === true) { 7 const folder_id = row[4] 8 const folder = DriveApp.getFolderById(folder_id) 9 const name = row[1] + "_" + row[2] 10 const subfolder = folder.createFolder(name); 11 const args1 = ["作業フォルダ1", "作業フォルダ2"]; 12 for (const arg of args1){ 13 subfolder.createFolder(arg); 14 } 15 } 16 } 17} 18

投稿2021/08/03 11:10

編集2021/08/03 11:26
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nxm83521

2021/08/03 11:19 編集

丁寧なご回答ありがとうございます! 早速試してみたのですが・・・ 「Exception: Unexpected error while getting the method or property getFolderById on object DriveApp.」(11行目) というエラーが出てきてしまいました。。。 Unexpected errorということですから原因不明でしょうか。 一つ可能性として考えましたが、フォルダIDの場所は共有ドライブとして利用している場所です。 もしかしたらドライブアクセス権限の問題でしょうか・・・ (フォルダへのアクセス、ファイルの作成削除はできるので権限は頂いているはずですが・・・) 分かればご教示いただけますと幸いです。
nxm83521

2021/08/03 11:25

失礼しました。時間をおいて作業したら無事に完了しました!! 不勉強で稚拙な質問だったかもしれませんがご回答いただきましてありがとうございます!! 本当に助かりました。 ありがとうございました!!!
nxm83521

2021/08/03 11:28

効率化の観点からGASの運用を進めています。 小さな職場で担当が自分しかおらず、手探りで進めている感じなので、今後も質問するかもしれません。 もし差し支えなければ相互フォロー?で質問の際は知恵を頂ければと思います。 どうぞよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2021/08/03 11:40

解決してよかったです。 相互フォローしなくても依頼可能な設定にしておりますので御自由にどうぞ。 ただ、私自身も勉強中&仕事や日常の片手間でやっている状態ですので、対応が遅くなったり、タイミングや内容によっては対応できない(=申し訳ないですが依頼を無視するような形となってしまう)場合があることは御了承ください。
nxm83521

2021/08/03 11:42

承知しました。 もちろんお時間に余裕がある時で構いませんのでどうぞよろしくお願いいたします。
nxm83521

2022/05/11 00:23 編集

ありがとうございました!
guest

0

var folder = DriveApp.createFolder(name);

をみるかんじでは、ドライブのルートにフォルダを作るプログラムになっているようですが、作成したフォルダは、ドライブのルートにできていたりしないでしょうか?

投稿2021/08/03 11:07

編集2021/08/03 11:08
CHERRY

総合スコア25171

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

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

nxm83521

2021/08/03 11:12

ご回答ありがとうございます。 なるほど、確かに自分のマイドライブのルートを確認したら試した回数分フォルダが生成されていました! となると、ご指摘の箇所をいじれば、目的のフォルダID箇所へフォルダを作成することが可能なのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問