Skip to content

Instantly share code, notes, and snippets.

@clarinet758
Last active May 17, 2018 17:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save clarinet758/b78a823632b7a16c0b9ed7e6e9b02222 to your computer and use it in GitHub Desktop.
Save clarinet758/b78a823632b7a16c0b9ed7e6e9b02222 to your computer and use it in GitHub Desktop.
カレンダー支援gas
//Original data was created by 冬木 照
//ver.1.0.0
// ->
//modified by clarinet758
//ver.1.30
//excelで言うところのBookがSpreadsheetなのは直感的ではなくて、(付いていけてない脳が)本当に糞で辛い
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ad = ss.getSheetByName('管理用'); //管理用シート名
var sc = ss.getSheetByName('入力'); //入力シート名
var rSt = 5; //入力シートの開始行
var cEn = 7; //入力シートの最終列
var cName = ad.getRange(1,2).getValues(); //本番カレンダー名
var pName = ad.getRange(2,2).getValues(); //previewカレンダー名
function AddPreview() {
var c = CalendarApp.getCalendarById(pName);
var events = c.getEvents(new Date(2015, 1 ,1), new Date(2020, 12, 31));
for(var n=0; n<events.length; n++){
events[n].deleteEvent();
}
AddYotei(false);
}
function AddHot() {
AddYotei(true);
}
function AddYotei(f) {
var flag = f;
if (flag === true) {
var cal = cName;
} else {
var cal = pName;
}
var lastRow = sc.getLastRow();
var con = sc.getRange(rSt, 1, lastRow, cEn).getValues(); //2次元配列で入力シートの内容を取得
for (i=0; i<=lastRow-5; i++) {
var title = con[i][0]; //タイトル
var des = con[i][1]; //備考
var st = con[i][2], en = con[i][3]; //日時
var lp = con[i][4]; //話数
var site = con[i][5];
var x = con[i][6];
var type = 1;
var jump = 2;
var chk = 0;
if (x === null || x === 0) {
type = 1;
} else if (x === 1) {
type = 2;
} else if (x === 2) {
type = 3;
jump = 4;
} else if (x === 3) {
type = 4;
jump = 2;
} else {
type = 1;
}
//話数の分だけ追加
if (type === 1 || type === 2) {
for (j=0; j<lp; j++) {
CalendarApp.getCalendarById(cal).createEvent(title, st, en, {description:des, location:site});
st.setDate(st.getDate()+(7*type));
en.setDate(en.getDate()+(7*type));
}
} else {
for (j=0; j<lp; j++) {
CalendarApp.getCalendarById(cal).createEvent(title, st, en, {description:des, location:site});
for (k=0; k<jump; k++) {
st.setDate(st.getDate()+7);
en.setDate(en.getDate()+7);
chk = st.getDate();
if (chk > 28) {//29日以降の第5週の日付は余分に週加算
st.setDate(st.getDate()+7);
en.setDate(en.getDate()+7);
}
}
}
}
}
//Browser.msgBox(cName); //print デバッグ用
if (flag === true) {
AllClear(); //反映させたらリストはクリアする
}
}
function getTitle() {
ad.getRange(3, 6, 100, 6).clearContent();
var y = ad.getRange(1,5).getValues(), k = ad.getRange(2,5).getValues();
var u = "http://api.moemoe.tokyo/anime/v1/master/" + y +"/" +k;
var response = UrlFetchApp.fetch(u);
var json=JSON.parse(response.getContentText());
var p = json.length;
for (i=0;i<p;i++) {
ad.getRange(3+i,6).setValue(json[i]["title"]);
}
}
function AllClear() {
sc.getRange(rSt, 1, sc.getLastRow() + 1, sc.getLastColumn()).clearContent();
}
function onOpen() {
var subMenus = [];
subMenus.push({name: 'お試し作成', functionName: 'AddPreview'});
subMenus.push({name: '本番作成', functionName: 'AddHot'});
subMenus.push({name: '入力リストをクリア', functionName: 'AllClear'});
subMenus.push({name: 'アニメ取得', functionName: 'getTitle'});
ss.addMenu('自動処理', subMenus);
}
function test() {
//ad.getRange(3, 6, 100, 6).clearContent();
}
@clarinet758
Copy link
Author

jsを育てるイメージで更新していきましょう!!!

@caulk
Copy link

caulk commented May 7, 2018

100点!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment