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

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

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

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

Q&A

1回答

6751閲覧

GOOGLEスプレットシートとカレンダー連携でセルに入力された関数を文字列として認識させたい

MOMOTA555

総合スコア8

Google Apps Script

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

0グッド

1クリップ

投稿2016/08/23 03:13

###前提・実現したいこと
ここに質問したいことを詳細に書いてくださいイメージ説明
###前提・実現したいこと

Googleスプレットシートでプルダウンで投入した表記した
関数を数値文字として認識させGoogleカレンダーへ反映させたい。

■例
※ 開始時間

関数
=concatenate(J22&K22&L22&M22&N22&O22)

上記はプルダウンでJ列以降で選択している。
(タブレットでの手入力が面倒だと要望の元)

表示文字
2016/08/24 17:59

処理は同様だと思うが
終了時間と説明部も同様に処理したい。

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

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

###該当のソースコード

GOOGLE スクリプト

//
//ver.1.0.0

//予定を作成する関数
function CreateSchedule() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var slist = ss.getSheetByName('スケジュール');
var clist = ss.getSheetByName('カレンダー一覧');
var lastrow = slist.getLastRow();

//予定の一覧・カレンダー名の一覧・カレンダーIDの一覧を取得
var contents = slist.getRange(2, 1, lastrow, 8).getValues();
var cnlist = clist.getRange(1, 1, clist.getLastRow(), 1).getValues();
var cidlist = clist.getRange(1, 2, clist.getLastRow(), 1).getValues();

//順に予定を作成
for(i = 0; i <= lastrow - 2; i++) {

//「完(作成完了)」になっていたら、飛ばす(途中でエラーが出て再度この関数を実行した時に、作成済みの予定が重複して作成されるのを防ぐため) if(contents[i][0] == '完') { //「終日」が空白(つまり、終日予定でない)の場合は、「開始日時」・「終了日時」を設定して予定を作成 }else if(contents[i][4] == ''){ //選択されたカレンダーのIDを取得 for(j = 0; j <= cnlist.length; j++) { if(contents[i][1] == cnlist[j][0]) { var calendar = cidlist[j][0]; break; } } //予定のコンテンツを取得 var title = contents[i][2]; var startTime = contents[i][5]; var endTime = contents[i][6]; var description = contents[i][3]; var location = contents[i][7]; //予定を作成 CalendarApp.getCalendarById(calendar).createEvent( title, startTime, endTime, {description: description, location: location} ); //「終日」が空白でない(つまり、終日予定)の場合は、日付を設定して予定を作成 }else{ //選択されたカレンダーのIDを取得 for(j = 0; j <= cnlist.length; j++) { if(contents[i][1] == cnlist[j][0]) { var calendar = cidlist[j][0]; break; } } //予定のコンテンツを取得 var title = contents[i][2]; var date = contents[i][4]; var description = contents[i][3]; var location = contents[i][7]; //予定を作成 CalendarApp.getCalendarById(calendar).createAllDayEvent( title, date, {description: description, location: location} ); } //無事に予定が作成されたら「完」にする slist.getRange(i + 2, 1).setValue('完'); //次

}
}

//シート「スケジュール」を初期化する関数
function ResetSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('スケジュール');
sheet.getRange(2, 1, sheet.getLastRow() + 1, sheet.getLastColumn()).clearContent();
}

//スプレッドシートが開かれたら自動的に実行される関数
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();

//スプレッドシートのメニューにカスタムメニュー「自動処理」を作成(他の関数を実行するメニューを作成)
var subMenus = [];
subMenus.push({name: 'カレンダー一覧取得', functionName: 'onOpen'});
subMenus.push({name: '作成', functionName: 'CreateSchedule'});
subMenus.push({name: 'リセット', functionName: 'ResetSheet'});

ss.addMenu('自動処理', subMenus);

//関数「GetCalendarList()」と同じ(カレンダー一覧は毎回読み込まないといけないので、ここでも実行)
var clist = ss.getSheetByName('カレンダー一覧');

//削除されたカレンダーが残らないように、一度カレンダーの一覧を削除
clist.getRange(1, 1, clist.getLastRow() + 1, 2).clearContent();

//一覧が白紙になった上で、再度最新のカレンダー一覧を取得、作成
var calendars = CalendarApp.getAllCalendars();
var range = clist.getRange(1, 1, calendars.length + 1, 2);

for(i = 0; i <= calendars.length - 1; i++) {
range.getCell(i + 1, 1).setValue(calendars[i].getName());
range.getCell(i + 1, 2).setValue(calendars[i].getId());
}
}

function test() {
}

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

kei344

2016/08/23 04:28

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、参考にされている記事などがありましたらURLを追記されたほうが回答が付きやすいと思います。
guest

回答1

0

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

ですが、createEventの引数の型は

createEvent( string, date, date, object )

です.
Google Apps ScriptのCalendarAppのドキュメントを下に添えておきますので、お読みください。
https://developers.google.com/apps-script/reference/calendar/calendar-app

蛇足ですが、私ならconcatenateの代わりに

Javascript

1var sheet /*シートを取得してください*/ ; 2var year = sheet.getRange(row,colummn).getValue(); 3/*以下、yearと同じ方法なので割愛*/ 4var month; 5var day; 6var hour; 7var minutes; 8 9var date 10 =new Date( 11 year, 12 month, 13 day [, 14 hour, minute 15 ] 16 ) ; 17 18sheet.getRange(row,column).setValue(date);

を使います。

これなら、セルのデータとってきて、calendarAppでそのままセットできますし。
まぁ、セルのデータはあくまでstringで、カレンダーに入力する直前に new Date でインスタンス化してもらってもOKです。

ちなみに、コードはインデントしていただけると助かります。
(大変失礼ながら、MOMOTA555様のコードは読むのを途中でやめちゃいました・・・。)

参考までに、私が過去書いたものを載せます。
終了時刻は、開始時刻の15分後で設定しています。

Javascript

1//eventName :string 2//eventStartDate:date 3//description :string 4//guestAddress :string 5CalendarApp 6 .getCalendarById("自分のメールアドレス") 7 .createEvent( 8 eventName, 9 startEventDate, 10 new Date( 11 startEventDate.setMinutes( 12 startEventDate.getMinutes()+15 13 ) 14 ),//終了時刻は、15分後 15 { 16 description:sentence, 17 guests:guestAddress 18 }

だいぶ説明を省略しているので、なにかご質問があればお手数ですがお願いします。

投稿2016/09/30 05:25

s.maeda

総合スコア147

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問