LoginSignup
6
7

GAS(Google Apps Script)チートシート

Last updated at Posted at 2020-12-04

概要

GASの良く使うパーツを書き溜めています。
個人用ですが参考になれば幸いです。
(const すべき所まで let で宣言しているのは大目に見てください・・・)

スクリプト

ブック(スプレッドシート)を取得
// 現在のブックを取得
let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

// IDを指定してブックを取得
// https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXX/edit#gid=0
let spreadsheet = SpreadsheetApp.openById('XXXXXXXXXXXXXXXXXXXX');

// URLを指定してブックを取得
let url = 'https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXX/edit#gid=0';
let spreadsheet = SpreadsheetApp.openByUrl(url);
ブック内のシートを取得
// 現在のシートを取得
let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
let sheet = spreadsheet.getActiveSheet();

// 現在のシートを取得(ブックを変数に格納する手順をスキップ)
let sheet = SpreadsheetApp.getActiveSheet();

// シート名を指定して取得
let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
let sheet = spreadsheet.getSheetByName('hoge');

// シート名を指定して取得(ブックを変数に格納する手順をスキップ)
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('hoge'); 
値を取得
// A1の内容を取得
let a1_value = sheet.getRange( 1, 1 ).getValue();

// 1行目から最終行まで
let startRow = 1;
let startCol = 1;
let lastRow = sheet.getLastRow();
let lastCol = sheet.getLastColumn();
let list = sheet.getRange(startRow,startCol,lastRow,lastCol).getValues();
シートに書き込み
// 1つのセルに書き込み
let sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange( 1, 1 ).setValue('hoge');

// 並んだセルに同時に書き込み
let sheet = SpreadsheetApp.getActiveSheet();
let obj = [
  ['a','b','c','d'],
  ['e','f','g','h']
];
// 開始列(開始Y軸)
// 開始行(開始X軸)
// 行数(Y軸範囲)
// 列数(X軸範囲)
sheet.getRange( 1, 1, 2, 4 ).setValues(obj);

// 最終行に追加
sheet.appendRow(['aa','bb']);
シート名を指定して 取得 OR 新規作成
/**
 * 今日の日付のシート名を指定してセルに文字を書き込む
 */
function myFunction(){
  let date = new Date();
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let name = year + '-' + month + '-' + day;
  let sheet = createSheet(name);
  // シートに書き込み
  sheet.getRange(1,1).setValue('hoge');
}

/**
 * 指定された名前のシートが存在すれば返却
 * 無ければ新規作成
 */
function createSheet(name){
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheetByName(name);
  if(sheet){
    // シートが見つかればそのまま返却
    return sheet;
  } else {
    // シートが無ければ原本から複製して返却
    // 原本を取得
    let originSheet = ss.getSheetByName('原本');
    originSheet.showSheet();
    originSheet.activate();
    // 複製
    ss.duplicateActiveSheet().setName(name);
    let newSheet = ss.getSheetByName(name);
    // 原本を隠す
    originSheet.hideSheet();
    return newSheet;
  }
}
ポップアップ系
let confirmation = Browser.msgBox('タイトル', '本文', Browser.Buttons.OK_CANCEL);
if(confirmation == 'cancel') {
  Browser.msgBox('キャンセルを押しました');
} else {
  Browser.msgBox('OKを押しました');
}
シートにメニューを追加
/**
 * シートにメニューを追加
 */
function onOpen(){
//メニュー配列
  let myMenu=[
    {name: '関数1', functionName: 'myFunction1'},
    {name: '関数2', functionName: 'myFunction2'}
  ];
  SpreadsheetApp.getActiveSpreadsheet().addMenu('スクリプト',myMenu);
}
function myFunction1(){
  Browser.msgBox('関数1 を実行しました。');
}
function myFunction2(){
  Browser.msgBox('関数2 を実行しました。');
}
日付関係( GAS というよりは js )
function dateTestFunction(){
  let date = new Date();
  let a = formatYmd(date); // 2020-1-1
  let b = formatYmdJp(date); // 2020年1月1日(水)
  let c = getTimeStamp(); // 2020-1-1 3:3:3
}
/**
 * ex. 2020-1-1
 */
function formatYmd(date){
  if(date==''){return '';}
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  return year + '-' + month + '-' + day;
}
/**
 * ex. 2020年1月1日(水)
 */
function formatYmdJp(date){
  if(date==''){return '';}
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let dayOfWeekStr = [ "", "", "", "", "", "", "" ][date.getDay()] ;
  return year + '' + month + '' + day + '日(' + dayOfWeekStr + '';
}
/**
 * ex. 2020-1-1 3:3:3
 */
function getTimeStamp(){
  let date = new Date();
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let hour = date.getHours();
  let minute = date.getMinutes();
  let second = date.getSeconds();
  return year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;
}
メール送信
let to = 'hoge@example.com';
let subject = 'テストメール';
let body = 'テストメールです。';
let options = {
  name: 'hoge事務局',
  cc: 'hoge2@example.com',
  bcc: 'hoge3@example.com'
};
GmailApp.sendEmail(to , subject, body, options);
CURL
function curl() {
  let url = "https://example.com";
  let headers = {
    Accept: "application/json",
    "Content-type": "application/json"
  };

  let data = {
    a: 1,
    b: 2 
  };

  let options = {
    method: "post",
    payload: JSON.stringify(data),
    headers: headers
  };
  UrlFetchApp.fetch(url, options);
}
HTTP エンドポイント(JSON)
/**
 * A1~B2 の値を配列で返す
 */
function getDatas() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('データ');

  let startRow = 1;
  let startCol = 1;
  let rowNum = 2;
  let colNum = 2;
  let datas = sheet.getRange(startRow, startCol, rowNum, colNum).getValues();
  return datas;
}

/**
 * GETリクエストの場合のレスポンス
 */
function doGet(e) {
  // ログシートに記録
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('get_log');
  let params = e.parameter;
  sheet.appendRow([new Date(), params]);

  // データを取得
  let responseAry = getDatas();

  // レスポンス
  let output = ContentService.createTextOutput();
  output.setMimeType(ContentService.MimeType.JSON);
  output.setContent(JSON.stringify( responseAry ));
  return output;
}

/**
 * POSTリクエストの場合のレスポンス
 */
function doPost(e) {
  // ログシートに記録
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('post_log');
  let json = e.postData.getDataAsString();
  let params = JSON.parse(json);
  sheet.appendRow([new Date(), params]);
  
  // データを取得
  let responseAry = getDatas();

  // レスポンス
  let output = ContentService.createTextOutput();
  output.setMimeType(ContentService.MimeType.JSON);
  output.setContent(JSON.stringify( responseAry ));
  return output;
}
HTTP エンドポイント(Webページ)
function doGet(e) {
  let html = '<p>htmlです</p>';
  let htmlOutput = HtmlService.createHtmlOutput(html);
  htmlOutput.setTitle('GASで構築したページ');
  htmlOutput.setFaviconUrl('https://example.com/favicon.png');
  
  return htmlOutput; 
}
別ページにリダイレクト

※Chromeの仕様変更により使えなくなりました

function doGet(e) {
let url = 'https://exapmle.com';
html = "<script>window.top.location.href=\"" + url + "\";</script>"
return HtmlService.createHtmlOutput(html);
}

iframeの中でWebページを開きます

function doGet(e) {
  let url = 'https://exapmle.com';
  html = '<script>window.onload = function() {location.href="' + url + '";};</script>'

  let htmlOutput = HtmlService.createHtmlOutput(html);
  htmlOutput.setTitle('iframeの中で表示');
  htmlOutput.setFaviconUrl('https://example.com/favicon.png');
  
  return htmlOutput; 
}

iframeの中で開きたくない場合はこちら

  let html = ''
  + '<body>'
  + '  <div>'
  + '    <a href="' + url + '" target="_blank">自動で遷移しない場合はこのボタンをクリックしてください</a>'
  + '  </div>'
  + '  <script>window.open("' + url + '", "_blank");</script>'
  + '<style>'
  + '  body {background: #e9e9e9;}'
  + '  div {width: 100%; display: flex;}'
  + '  a { margin: 40px auto; padding: 30px 50px; background: #fff; display: inline-block; border: solid 1px #b3b3b3; border-radius: 10px; font-size: 21px; text-decoration: none; color: #1015ab;}'
  + '</style>'
  + '</body>'
  ;
  
  let htmlOutput = HtmlService.createHtmlOutput(html);
  htmlOutput.setTitle('転送ページ');
  htmlOutput.setFaviconUrl('https://example.com/favicon.png');
  
  return htmlOutput; 
for(v8ランタイム対応)
// 配列
let datas = [500,800,200];
for (let i = 0; i < datas.length; i++) {
  let data = datas[i];
  console.log(i);
  console.log(data);
}

// 配列(foreachライク)
let datas = [500,800,200];
for (let data of datas) {
  console.log(data);
}

// 連想配列
let datas = {color:'red', name:'apple'};
for (let idx in datas) {
  let data = datas[idx];
  console.log(idx);
  console.log(data);
}
ランダムな文字列を生成
/**
 * ランダム生成した文字を返す
 * @param int type 1:アルファベット 2:数字
 * @param int len 桁数
 * @retrun string
 */
function getPWD(type,len){
  let c = (type==1) ? "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz" : "23456789";  
  let cl = c.length;
  let pwd = "";
  for(let i=0; i<len; i++){
    pwd += c[Math.floor(Math.random()*cl)];
  }
  return pwd;
}
ドライブ内のCSVファイルを読込
function readCsv() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheets = ss.getSheets();

  let dirName = "test";
  let filename = "aaa.csv";
 
  try {
    //csvファイルを取得+配列化
    let dir = DriveApp.getFoldersByName(dirName);  
    let file = DriveApp.getFilesByName(filename).next();
    let data = file.getBlob().getDataAsString('shift-jis');
    let csv = Utilities.parseCsv(data);

    // シートに書き込み
    let sheet = SpreadsheetApp.getActiveSheet();
    sheet.getRange( 1, 1, csv.length, csv[0].length ).setValues(csv);

  } catch(e) {
    MailApp.sendEmail('hoge@example.com', 'csvインポート失敗。',e.message);
  } 
}
6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7