前提・実現したいこと
スプレッドシート初心者で、毎日の出欠管理票を作ろうとしています。
自動的に日本の祝日のあるカレンダーが反映して、スプレッドシートの列(縦)に記入できるようにしたいです。
数年分くらいのものを作りたいと思っていますが、祝日の管理を毎年するのを避けるためにカレンダー連携で自動的に日付が記入され、土日祝日の色分けもできるようにしたいです。
1シートで1ヶ月分 × 12枚(12ヶ月分) × 数年分(くらい)
発生している問題!
スプレッドシートとGoogleカレンダーををGASで連携するところまではできましたが、これを利用したほうがいいのか、他にもやり方があるのか、知りたいです。?
GASで連携はできましたが、カレンダーを反映させるスクリプトエディタの記入方法もわかりません。
「カレンダーが上手く機能すればいい」とは?
ご質問ありがとうございます。
スプレッドシート外から、土日祝日等もわかる日本のカレンダーを自動的にスプレッドシートに適応させることができればいいということです。
スプレッドシート、GAS、エディタなどで使われる用語を知らないので、言葉足らずですがご理解いただけるでしょうか。
現在作っている縦列(A列、B列)のカレンダーは表計算と同じように作っていて、日本のカレンダー(祝日)とは連携されていません。
コードやエラーメッセージをお示しになった方が、アドバイスをもらいやすいと思いますよ。
ご指摘ありがとうございます。
エラーメッセージはありません。
コードは、以下になります。なお、コード記入はド素人でして、このコードも1年以上前にインターネット上で検索して拾ってきて、当時は理解でき自分なりに変更できたのですが、今は完全に忘れてしまい、全くわからないでいます。
------------------------------------------------------------------------------------------------------------
function doPost(e){
var name = e.parameters["value"][0]; //IFTTTから名前を受け取る1
var id = '1AGqbhUiSy47sXSsmDnfQkApGEGq_cVDKpxQFU0ZON-M/edit#gid=0'; //スプレッドシートファイルのID(URL)
var ss = SpreadsheetApp.openById(id);
var sheet = ss.getSheetByName(name);
var day = new Array('日', '月', '火', '水', '木', '金', '土');
var date = new Date(); //日時の取得
var year = date.getFullYear();
var mon = date.getMonth()+1;
var d = date.getDate();
var min = date.getMinutes();
var time = date.getTime();
var lm25 = ((mon!=1)?year:year-1)+'/0'+((mon>26)?mon:mon-1)+'/'+25;
var llm25 = ((mon!=1&&mon!=2)?year:year-1)+'/0'+((mon>26)?mon-1:mon-2)+'/'+25;
var row = sheet.getLastRow();
var ld = sheet.getRange('A'+row).getValue(); //最後の行の日付を取得(Date型?)
var ldy = ld.getFullYear();
var ldm = ld.getMonth();
var ldd = ld.getDate();
var ldt = ld.getTime();
var lds = ld.getFullYear()+'/'+(mon>=10?mon:'0'+mon)+'/'+ld.getDate();
var l25, ll25;
//新たに取得した日付が最終行の日付と一致しないかどうかで分岐
if(mon != ldm+1 || d != ldd){ //一致しなければ出勤扱い、新しい行に打刻
var range = sheet.getRange('A'+(row+1)+':D'+(row+1));
range.setValues([[year+'/'+(mon>9?mon:'0'+mon)+'/'+d, day[date.getDay()], "", date.getHours()+':'+(min>=10?min:'0'+min)]]);
}
else{ //一致すれば終了時刻に上書き
var range = sheet.getRange('E'+row+':F'+row);
range.setValues([[date.getHours()+':'+(min>9?min:'0'+min), '=E'+row+'-D'+row]]);
}
}
------------------------------------------------------------------------------------------------------------
私も初めてか2度目の質問で指摘されてのですが、ここではなくて質問自体を修正して、質問本文のところに書き込むよう勧めます。その方がこの質問を覗いた人に見やすくなります。今のままだと、コメント欄をわざわざ開かないとみることができません。
ちなみに、<code>を押して以下のようなタグを出してそこにコードを記載してください。
```ここに言語を入力
コード
```
クジラ飛行机さんの連載「仕事に役立つJavaScript入門」の記事(下記2つ)がお役に立つかもしれません
https://xtech.nikkei.com/it/pc/atcl/column/15/1028503/110900028/
https://xtech.nikkei.com/it/pc/atcl/column/15/1028503/010800031/
いろいろとありがとうございます。
勉強しなおしてみます。
私には質問内容そのものが高度すぎたのかもしれません。
回答1件
あなたの回答
tips
プレビュー
