googleカレンダーに配列を使ってスケジュールを入れる関数
/**
* 配列をもとにカレンダーに予定を入れる
* @param holidays{object}
* @return -
* タイトル、開始時間、終了時間
*/
function calendar(holidays) {
for (const holiday of holidays) {
const [title, startTime, endTime] = holiday;
CalendarApp.getDefaultCalendar().createEvent(title, startTime, endTime);
}
}
日本の祝日+特定の日で配列を作る関数
/**
* 祝日+会社の休日から配列Holidaysを作る
* @param -
* @return holidays
* 年始に稼働させる(getFullYearを使用しているため)
*/
function isHoliday() {
//Googleカレンダーの日本の祝日を取り込む
const cal = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
const fullYear = new Date().getFullYear();
const [startDate, endDate] = [new Date(fullYear, 0, 1), new Date(fullYear, 11, 31)];
const events = cal.getEvents(startDate, endDate);
//格納用の空配列を用意
const holidays = [];
for (const value of events) {
holidays
.push(
[value.getTitle(), new Date(value.getStartTime().setHours(8)), new Date(value.getEndTime().setHours(-4))]);
}
// 会社の休日を設定
const companyEvents = [
new Date(fullYear, 11, 29),
new Date(fullYear, 11, 30),
new Date(fullYear, 11, 31),
new Date(fullYear, 0, 2),
new Date(fullYear, 0, 3)
];
/* 会社の休みを配列に入れる */
for (const value of companyEvents) {
}
return holidays;
}
依頼書の依頼番号を入れたらPDF出力するスクリプト
◼️前提
・別シートにデータレコードがあります
・帳票形式の「依頼書」シートに依頼番号をいれるとデータが反映されます
◼️動作
・依頼番号を書き換えるとウィンドウが出ます
・PDFしていいか聞かれるのでOK押します
・指定フォルダにA4縦でPDFされます
・ファイル名は帳票からセル指定で情報取得して作成されます
//参考1:https://auto-worker.com/blog/?p=4836
const test = 0 //本番:0、テスト:1
//移動させたい先のフォルダID
const folderId = `××××××××××××××××××××××××××××`;
//-----------------------------------------------------------------------------------
function onEdit(e) {
//シート名が任意のシートなら処理に入る
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const targetSheet = spreadsheet.getSheetByName('依頼書');
const targetSheetName = targetSheet.getSheetName();
const activeSheet = spreadsheet.getActiveSheet();
const activeSheetName = activeSheet.getSheetName()
//開いているシートがターゲットシートかどうかを判定し、違う場合は、直ちに処理を終了する。
if (targetSheetName !== activeSheetName) { return };
console.log(`指定したシート: ${targetSheetName}`);
console.log(`アクティブなシート: ${activeSheetName}`);
//アクティブセルを取得
const activeCell = targetSheet.getActiveCell();
//開いているシートがターゲットシートかどうかを判定し、違う場合は、直ちに処理を終了する。
if (activeCell.getA1Notation() !== `L3`) {
console.log(`セル位置相違`); return
};
console.log(`セル位置OK`);
let question = Browser.msgBox(`この内容で発行しますか?`,Browser.Buttons.OK_CANCEL);
if(question ===`ok`){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const title = ss.getRange(`B6`).getValue();
const number = ss.getRange(`L3`).getValue();
// PDF出力対象のシートを指定
const ssId = ss.getId();
const sheetId = ss.getSheetByName('依頼書').getSheetId();
// スプレッドシートをPDF出力するためのURL
const url = 'https://docs.google.com/spreadsheets/d/' + ssId + '/export?'
// PDF出力のオプションを設定
const options = 'exportFormat=pdf&format=pdf'
+ '&gid=' + sheetId //PDFにするシートの「シートID」
+ '&portrait=true' //true(縦) or false(横)
+ '&size=A4' //印刷サイズ
+ '&fitw=true' //true(幅を用紙に合わせる) or false(原寸大)
+ '&gridlines=false' //グリッドラインの表示有無
// + '&range=A1%3J51' //★POINT★セル範囲を指定
// %3A はコロン(:)を表す
const requestUrl = url + options;
const token = ScriptApp.getOAuthToken();
const params = {
'headers': { 'Authorization': 'Bearer ' + token },
'muteHttpExceptions': true
};
const response = UrlFetchApp.fetch(requestUrl, params);
//Blobオブジェクトを作成
const blob = response.getBlob();
blob.setName(title + ` 番号:` + number + '.pdf'); //PDFファイル名を設定
//指定のフォルダにPDFファイルを作成
const folder = DriveApp.getFolderById(folderId);
folder.createFile(blob);
}
}
Arrayから今日のレコードだけ返す関数
/*
* dateLabel列が今日のものだけを抽出する関数(yyyyMMddに置き換え->filter)
* @param dateLabel 日付フォーマットを変換したい項目名(1行目であること)
* @param values 変更したい本体データ(2行目以降であること)
* @return newValues 今日のデータのみを配列にして返す
*/
function filterToJustToday_(dateLabel, values) {
const [header, data] = values;
const typeDateColumn = header.indexOf(dateLabel);
console.log(`関数:filterToJustToday_実施 日付フォーマットを変更したい項目index番号:` + typeDateColumn);
for (const value of data) {
let dataline = value;
dataline[typeDateColumn] = Utilities.formatDate(new Date(value[typeDateColumn]), `JST`, `yyyyMMdd`);
}
const today = Utilities.formatDate(new Date(), `JST`, `yyyyMMdd`);
return newValues;
}
まぁらテスト
テスト