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

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

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

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

Q&A

解決済

1回答

335閲覧

formatDate(string,string,string)/スプシからカレンダー予定を作成する。

maitohan

総合スコア14

Google Apps Script

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

0グッド

1クリップ

投稿2019/03/13 11:33

編集2019/03/13 23:25

前提・実現したいこと

スプレッドシートから、Gカレンダーに予定を作成したいです。
実行はされるのですが、
毎回エラーメッセージが出るので何が問題なのかが気になります。

どなたか、教えてくださいmm

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

メソッドformatDate(string,string,string)が見つかりません。

該当のソースコード

 eventday = sht.getRange(i, 23).getValue();  var b = Utilities.formatDate(eventday,"JST","yyyy/MM/dd");

試したこと

下記のように、eventdayを書き換えたところ

 eventday = sht.getRange(i, 23).getValue();  var b = Utilities.formatDate(new Date(eventday),"JST","yyyy/MM/dd");

次は、新たなエラーメッセージが出ます。

オブジェクト で関数 getHours が見つかりません

なお、getHours部分のコードは下記です。

var starttime = sht.getRange(i,17).getValue();  var H = starttime.getHours();

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

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

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

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

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

guest

回答1

0

ベストアンサー

iを使っているということはループしているはず。
例えば最終行までループすると、何かの際にキーボードにふれてどこかのセルに、あ、だけでも入っていると自分で思う表より下までループすることはざらにあります。

そのiにあたる何行目かの17, 23列目は空白ではないですか?正しい日付が(2/30は日付と判断されない)入っていますか?

投稿2019/03/14 00:28

papinianus

総合スコア12705

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

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

maitohan

2019/03/14 00:51

ご回答ありがとうございます! シート全体をくまなく見たのですが、 テストしているカレンダーの日程以外はデータがありませんでした涙 >iを使っているということはループしているはず。 はい。 >for(i = 2; i <= sht.getLastRow(); i++) { でループさせています。 デバックを見てみたところ、 [eventday]が空にになっています。これ何か関係あるでしょうか? https://gyazo.com/1aade4b30c67963e03f5ce63a735dab9
papinianus

2019/03/14 01:04

全体をみていただいたのは注意のためで、大事なのは、W列やQ列に空白があるかないかです。 (カレンダー日程のどれか1つにでもです) > eventdayが空 このデバッグ画面(とコードに関して開示された情報)からは、W3のセルが空白なのではないかと思えます。
maitohan

2019/03/14 01:25

再度のご回答本当にありがとうございます。 >W列やQ列に空白があるかないかです。 空白はあります。 ただ、行全体が空白です。 >このデバッグ画面(とコードに関して開示された情報)からは、W3のセルが空白なのではないかと思えます。 こちらがヒントになり気づいたのですが、 例えば5行目までデータを入れてデバックを実行すると、[eventday]が空白とされる[i]は6と表示され、 1行データを増やして6行目まで入れてから実行すると [i]7が[evenday]空白となります。 どうして1ずれるのでしょうか?
papinianus

2019/03/14 06:52

ずれるというのはプログラムやこのバグの表現としては正しくないです。 iは処理している行数ですね。 そして、maitohan様が見ているこのデバッガ画面は、エラーになった(おそらく最初の)瞬間を示しています。 当初より仰っておられるように、コードは意図に添って動作しているため、内容が埋まってる行まではエラーになっていないわけです。 なので、「エラーになった(おそらく最初の)瞬間」とは、つまり、データがある行(正常に処理できる行)の次の行であると期待できます。 となれば、iが"自分がデータを入れたはずの行"+1になっているのは、エラーから見る必然であり、ずれているというよりも、「forで停止条件としている`i < sht.getLastRow()`が期待する行でiを止めていない」です。 iがずれているのではなく、回答の繰り返しになりますが、「自分で思う表より下までループ」してしまっているのです。 問題を特定するために、`var edgeRow = sht.getLastRow();`を入れ、これのデバッグ出力を確認してください。 edgeRowが、特定の行であれば、その行に、全角スペースかもしれません、何かあるはずです。 edgeRowが想定する行+1で変動するのであれば、そのシートの使用上の問題か、gasのバグかで1つ先を最終行と思ってしまうようなので、必ず何かが入るはずの列の値が空白であるかを検証し、if(sht.Range(i, 必須項目の列の番地).getValue == "") { break; }として、forを中断させましょう。 (edgeRowが変動していても、もしこのシートを行挿入で編集しているのだとすれば、最終行の下に、全角スペースなどがある可能性があります)
maitohan

2019/03/16 15:02

丁寧なご回答ありがとうございます。 私の質問にこんなに丁寧にご回答いただけるなんて本当にうれしいです。 エラー時は、i=8でよいのだということも理解できました!ありがとうございます! まさに >もしこのシートを行挿入で編集しているのだとすれば こちらの状態でしたので、いったん全ての行を削除して実行してみたところ、 問題なく実行できました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問