基本

投稿者: | 2022-10-01

目次

コメント

// 1行コメント

/*
複数行にまたがるコメント
*/

スプレッドシートOBJ(ss)を取得

const ss = SpreadsheetApp.getActiveSpreadsheet();
const ss = SpreadsheetApp.openByUrl("url");
const ss = SpreadsheetApp.openByID("スプレッドシートID");

シートOBJ(sh)を取得(直接取得)

const sh = SpreadsheetApp.getActiveSheet();

シートOBJ(sh)を取得(ss経由)

const sh = ss.getSheetByName('SheetName');
	or
const sh = ss.getSheets(); // 戻り値:配列

シートIDの取得

const gid = sh.getSheetId(); 
// SheetIDはURLの末尾 "edit#gid="の後ろにある数値

SS名およびsh名の取得

sh.getName(); // getName()はsh,ssで利用可
ss.getName();

シートのセル範囲を取得

sh.getRange('A1')
sh.getRange(1, 1)
sh.getRange('A1:C5')
sh.getRange(1, 1, 行幅, 列幅)

シートの全範囲を取得

const range = sh.getDataRange();
	or
const range = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn());

範囲の値を取得

const value = sh.getRange('A1').getValue();
const values = sh.getRange(1, 1, 2, 2).getValues(); // <- 末尾ああああsあり
const values = sh.getDataRange().getValues();

範囲にデータをセット

sh.getRange('A1').setValue('aaa');

const values = sh1.getDataRange().getValues(); // sh1を取得し
sh2.getRange(1, 1, values.length, values[0].length).setValues(values); // sh2の同じ範囲wを取得し貼り付け

行列番号の開始位置

位置情報:(1, 1)から開始
値の取得:(0, 0)から開始

行列の削除

■行の削除
sh.deleteRow(5) // 5行目を削除
sh.deleteRows(3, 2) // 3行目〜4行目を削除

■列の削除
sh.deleteColumn(3)
sh.deleteColumns(3, 2) //3列目〜4列目を削除

セルの値を見たまま文字列で取得

const val = sh.getRange(1,1).getDisplayValue()
cont vals = sh.getRange(1,1,2,2).getDisplayValues() //2次元配列

行列数の取得

const cell = sh.getRange('A3');
cell.getRow();
cell.getColumn();

コピー

const sh = ss.getActiveSheet();
// A1をコピーしてB1にペースト
sh.getRange('A1').copyTo(sh.getRange('B1'));
// A2:B2をコピーしてC2にペースト
sh.getRange('A2:B2').copyTo('C2');
// A3をコピーしてB3に「書式のみ」ペースト
sh.getRange('A3').copyTo(sh.getRange('B3'), {formatOnly: true});
// A4をコピーしてB4へ「値のみ」ペースト
sh.getRange('A4').copyTo(sh.getRange('B4'), {contentsOnly: true});

アドレスの取得(R1C1形式)

const rng = sh.getRange(1,1,2,2);
console.log(rng.getA1Notation());
// A1:B2

書式の指定

const rng1 = sh.getRange('A1'); // 2021年08月26日、とする
rng1.setNumberFormat('yyyy/MM/dd'); // 2021/10/26へ変換
rng1.setNumberFormat('yyyy年m月d日'); // 2021年8月26日へ変換

const rng2 = sh.getRange('B1'); // 1000、とする
rng2.setNumberFormat('[$¥]#,##0'); // ¥1,000へ変換 

SSのURL取得

SpreadsheetApp.getActiveSpreadsheet().getUrl();
// SSのリンク全体を取得
Spreadsheetオブジェクト.getUrl() + '#gid=' + Sheetオブジェクト.getSheetId()

MSG Box

alert

Uiオブジェクト.alert(prompt)
Uiオブジェクト.alert(prompt, buttons)
Uiオブジェクト.alert(title, prompt, buttons)

const ui = SperadsheetApp.getUi();
const res1 = ui.alert('MSG');
const res2 = ui.alert('MSG', ui.ButtonSet.OK_CANCEL);
const res3 = ui.alert('TITLE', 'MSG', ui.ButtonSet.YES_NO);
戻り値はLogger.log()でないと見れない
function myAlert(){
  let ui = SpreadsheetApp.getUi();
  let response = ui.alert(
    'テスト',
    'どれかボタンをお押して',
    ui.ButtonSet.YES_NO
  );
  switch(response){
    case ui.Button.YES:
      console.log('"はい"が選択されました');
      break;
    case ui.Button.NO:
      console.log('"いいえ"'が選択sされました');
      break;
    case ui.Button.CLOSE:
      console.log('閉じます');
  }
}

テキスト入力式のダイアログBOX

const ui = SpreadsheetApp.getUi();

const res1 = ui.prompt('MSG');
const res2 = ui.prompt('MSG', ui.ButtonSet.OK_CANCEL);
const res3 = ui.prompt('TITLE', 'MSG', ui.ButtonSet.YES_NO);
戻り値 PromptResponse

// PromptResponseオブジェクトkからの情報の取り出し方
console.log(res3.getResponseText());

曜日を取得

function dayOfWeek(dataObj){
  let dayOfWeekArray = ["日","月","火","水","木","金","土"];
  if(dataObj){ // ←空の場合、Error?
    let weekNum = dataObj.getDay();
    let dayOfWeek = '(' + dayOfWeekArray[weekNum] + ')';
    return dayOfWeek;
  } else {
    ;
  }
}

MM/DD形式を取得

function dateFormated(dateObj){
  if(dataObj){
    return Utilities.foramtDate(dateObj, "Asia/Tokyo", "MM/dd");
  } else {
    ;
  }
}

■cf)
let date = new Date(); // Sun Aug 05 2018 15:27:05 GMT+0900
date.getFullYear() //2018
date.getMonth() //7(=8)月
date.getDate() // 5
date.getDay() // 0
date.getTime() // タイムスタンプ値

2次元配列の加工

let values = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]の場合

// 各2列目を配列化 -> [2,5,8]
values.map(function(value, index){return value[1];});

// 2列目に5を含むValue行を取得 -> [4,5,6]
values.filter(function(value, index){return value[1]==5;});

let values = [
 [1,2,3,4,5],
 [6,7, ,9,6],
 [3,2,6,9,8]
]

// 列2と列4で配列を作りたい -> [[2,4], [7,9], [2,9]]
var x = values.map(function(value){
  return [value[1], value[3]];});
}

// 

クリア

■セルのクリア
const ss = SperadsheetApp.getActiveSpreadsheet();
const sh = ss.getActiveSheet();
// クリア
sh.getRange(1,1).clear()
// 値のみクリア
sh.getRange(2,1).clear({contentsOnly: true});
// フォーマットのみクリア
sh.getRange(4,1).clear({formatOnly: true});

■値や数式のみクリア
const rng = sh.getRange('A1:C3');
rng.clearContent();

■シート全体のクリア
sh.clear()

リテラル表現

const TENKI = '晴れ';
console.log( `今日のて天気は${TENKI}です`);

const message = ui.alert('あああ\nいいい\nううう');
or 
const message = `
あああ
いいい
ううう
`;

クリア時にMSGを付与

function main(){

  // 削除MSG(Noなら強制終了)
  if(clearAlert() == false){return;}

  clearRangeContent("シート1", "A5", "B3:C3", "D2");

}

// セル範囲のコンテンツをクリア(引数:シート名、セル範囲(ex."A1", "A2:B4"、複数記載OK))
function clearRangeContent(sheetName, target1, target2, target3){

  const ss = SpreadsheetApp.getActiveSpreadsheet();  
  const sh = ss.getSheetByName(sheetName);

  console.log(arguments.length);

  for(let i = 1; i < arguments.length; i++){

    let targetRange = arguments[i];

    console.log(targetRange);

    sh.getRange(targetRange).clearContent();

  }
}


// 削除MSG、YES_NOアラート

function clearAlert(){

  const ui = SpreadsheetApp.getUi();

  const response = ui.alert(
    '確認',`削除します。よろしいですか?`,
    ui.ButtonSet.YES_NO
  );

  switch(response){
  
    case ui.Button.YES:
      return true;

    case ui.Button.NO:
      return false;
  };
}

○○

○○

○○

カテゴリー: GAS