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

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

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

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

JavaScript

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

Q&A

解決済

3回答

3361閲覧

関数で生成した変数をグローバル変数に反映させる

Junkak

総合スコア20

Google Apps Script

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

JavaScript

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

0グッド

1クリップ

投稿2021/09/16 13:28

編集2021/09/23 04:12

関数で生成した変数をグローバル変数に反映させたいと考えています。
(フォルダは1つあればいいので、関数は1日1回時間トリガーで起動することを考えています)
解決法を教えていただけないでしょうか。

以下コードです。

GoogleAppsScript

1//グローバル変数 2const sourceFolderId = "*****"; //親フォルダID(変更なし) 3 4//毎日日付フォルダを生成する関数 5function createFolder() { 6 const folder = DriveApp.getFolderById(sourceFolderId); 7 8 //名前が今日の日付のフォルダを生成 9 let today = new Date(); 10 today = Utilities.formatDate(today, "JST", "dd"); 11 const dateName = `${today}日`; 12 newFolder = folder.createFolder(dateName); 13 return newFolder; 14} 15 16const newFolderId = newFolder.getId(); //日付フォルダID

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

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

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

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

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

k4a

2021/09/16 14:34

createFolder関数から値(連想配列など)を返せば良いだけではないですか? 業務内容を依頼しているように見えるので、実際に業務であっても「業務」という言葉は出さないほうが良いと思います。
Junkak

2021/09/17 11:36

グローバル変数に反映するのは不可能でしょうか。 その理由は関数は1日1回だけ起動すれば良く、その日はずっとグローバル変数に同じIDを持たせておきたいため。 もしその方法が不可能であれば、条件分岐で同じ名前がある場合は、翌日の名前のフォルダがすでに存在する場合は処理を飛ばすなどの対応にしたいと思います。 私自身が新聞社で働いており、自分の業務を簡易化するための改善です。
guest

回答3

0

ベストアンサー

kei344さんの回答、コメントの通りなんですが。

どこかにIDを保存しましょう

GASでやるならプロパティサービスに保管する or スプレッドシートのセルに書き出しておくといった方法が簡単かと思います。

プロパティサービス参考
https://qiita.com/chii-08/items/c8bb24c1141eb6ede83e

GAS

1 2//グローバル変数 3const sourceFolderId = "*****"; //親フォルダID(変更なし) 4const scriptProperties = PropertiesService.getScriptProperties(); 5const newFolderId = scriptProperties.getProperty("folderId"); //最新日のフォルダID 6 7//毎日日付フォルダを生成する関数 8function createFolder() { 9 const folder = DriveApp.getFolderById(sourceFolderId); 10 11 //名前が今日の日付のフォルダを生成 12 let today = new Date(); 13 today = Utilities.formatDate(today, "JST", "dd"); 14 const dateName = `${today}日`; 15 const newFolder = folder.createFolder(dateName); 16 17 18 //プロパティサービス内の最新日フォルダIDを更新 19 scriptProperties.setProperty("folderId", newFolder.getId()); 20 21 return newFolder; 22} 23 24

投稿2021/09/23 06:11

sawa

総合スコア3002

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

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

Junkak

2021/09/23 07:15

なるほど!スプレッドシートに保存しておくという方法がありましたね! ありがとうございます!
guest

0

js

1const a = b(); 2console.log( a ); 3function b() { 4 return 'res'; 5}

投稿2021/09/23 03:03

kei344

総合スコア69606

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

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

Junkak

2021/09/23 04:10 編集

ありがとうございます。 こちらですと毎回新規フォルダが作られることになりませんか? フォルダは1つあればいいので、関数は1日1回、時間トリガーで起動することを考えています。
kei344

2021/09/23 04:34

プロセスをまたぐ「グローバル変数」というものは無いので、どこかにIDを保存しましょう。 もしくは「フォルダ名から検索してなければ作る関数」を作りましょう。
Junkak

2021/09/23 04:58

>プロセスをまたぐ「グローバル変数」というものは無いので、どこかにIDを保存しましょう。 なるほど。「グローバル変数は関数を経て、値を決定できない」ということでしょうか。 >もしくは「フォルダ名から検索してなければ作る関数」を作りましょう。 皆さんのお話を伺う限り、質問の内容を実現するのは難しいようなので、この方法を検討しています。
guest

0

グローバル変数

const で定義された変数はグローバル変数ではありません
グローバルコードで変数定義を行った場合、var ではグローバル変数の上書きが発生しますが、const では発生しません。

HTML

1<script> 2 'use strict'; 3 var name = 'foo'; 4 const length = 1; 5 6 console.log(name, this.name); // "foo" "foo" 7 console.log(length, this.length); // 1 0 8</script>

const

const で定義された変数は再代入できません
変数定義時に期待する値を代入する必要があります。

JavaScript

1const sourceFolderId = createSourceFolderId(); 2const articleFolderId = createArticleFolderId(); 3const nonReviewedArticlesFolderId = createNonReviewedArticlesFolderId(); 4const imageFolderId = createImageFolderId(); 5const archiveFolderId = createArchiveFolderId();

一つの関数から、複数の「const定義された変数」を初期化するには分割代入を使用します。

JavaScript

1'use strict'; 2function createFolder () { 3 return [1,2,3,4,5]; 4} 5 6const [sourceFolderId, articleFolderId, nonReviewedArticlesFolderId, imageFolderId, archiveFolderId] = createFolder(); 7console.log(sourceFolderId, articleFolderId, nonReviewedArticlesFolderId, imageFolderId, archiveFolderId); // 1 2 3 4 5

Re: Junkak さん

投稿2021/09/18 14:35

編集2021/09/19 10:43
think49

総合スコア18189

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

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

Zuishin

2021/09/18 15:27

> 従って、一つの関数から、複数の「const定義された変数」を初期化する事は出来ません。 できます。 const [a, b] = [1, 2];
Zuishin

2021/09/18 15:31

> const で定義された変数はグローバル変数ではありません。 質問でグローバル変数とされているものがグローバル変数でない根拠にはなりません。 https://developer.mozilla.org/ja/docs/Glossary/Global_object > (Node.js ではこの限りではありません。)
Zuishin

2021/09/18 15:31

また、この回答は質問の解決法になっていません。 なぜ二つも高評価がついているんでしょうか?
think49

2021/09/19 10:43

修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問