Google apps scriptでメニューを追加する方法

 Google apps scriptで自分が作ったスクリプトスプレッドシートのメニューへ追加して実行する方法

 

onopen内でaddMenuを作成する。

 

参照元https://developers.google.com/apps-script/guides/menus

 

Google apps scriptでスプレッドシートへカスタムメニューを追加のサンプル

function onOpen() {

//変数Eventへ配列を使ってスクリプトを割り当て
var Event=[
{name: "plan1登録", functionName: "Calendar_record"},//plan1にCalendar_recordを割り当て
{name: "plan2登録", functionName: "Calendar_record2"},//plan1にCalendar_record2を割り当て
{name: "シート選択",functionName:"sheet_choice"}//シート選択にsheet_choiceを割り当て
];

//ツールバーに新規メニュー追加して名前を”MyMenu”に
SpreadsheetApp.getActiveSpreadsheet().addMenu("MyMenu",Event); //メニューを追加

}

 

結果

スプレッドシートのメニューバー「ヘルプ」の右側に「MyMenu」が表示されて、プルダウンでplan1登録、plan2登録、シート選択のメニューが表示された。

 

まとめ

シート上でスクリプトの実行操作が出来るので重宝する。

 

 

Google apps script|比較演算子一覧

Google apps scriptで使える比較演算子の一覧

名前 演算子 説明
等価 == 左辺と右辺が等しい時はtrueを返す 1==1 //true
厳密等価 === 左辺と右辺が等しくかつ同じデータ型の時にtrueを返す 1===1 //true
不等価 != 左辺と右辺が等しくない時にtrueを返す 1!=1 //false
厳密不等価 !== 左辺と右辺が等しくなく、データ型も同じでない時にtrueを返す 1!==1 //false
1!==’1’ //true
より小さい 左辺が右辺より小さければtrueを返す 1<1 //false
1<2 //true
以下 <= 左辺が右辺以下の時にtrueを返す 1<=1 //true
1<=2 //true
より大きい 左辺が右辺より大きければtrueを返す 1>1 //false
2>1 //true
以上 >= 左辺が右辺以上の時にtrueを返す 1>=1 //true
1>=1 //true

 

まとめ

配列に代入した値を比較演算子で比較するとfalseになる。

 

格納されるのはメモリ上のアドレスになるため。

 

Google apps scriptで列幅を自動調整する

Google apps scriptで列幅を自動調整するには

 

✔ autoResizeColumn(columnPosition)

 

参照元Class Sheet  |  Apps Script  |  Google Developers

を使う。

 

Google apps scriptで列幅を自動調整する例

 

/*列幅を自動調整*/

function chuuouResize() {

var ss,sht,rng,col

ss = SpreadsheetApp.getActiveSpreadsheet();
sht = ss.getSheetByName('シート1');

//8列目の幅を自動調整
sht.autoResizeColumn(8);

}

 

結果

8列目のセル値の長さに合わせて列幅が広くなった。

 

まとめ

1列しか指定出来ないので、選択範囲を中央揃えにする時はfor loopなのかな。

 

 

Google apps scriptで中央揃えにする

Google apps scriptで中央揃えにするには

 

✔ setHorizontalAlignment(alignment)

 

名前:alignment  

タイプ:String

説明:アライメント、どちらか'left'、'center'または'normal'。 null値は、アライメントをリセット

 

を使う。

 

Google apps scriptで中央揃えにする例

 

/*A1~J1000を中央揃え*/

function chuuou() {

var ss,sht,rng

ss = SpreadsheetApp.getActiveSpreadsheet();
sht = ss.getSheetByName('シート1');
rng = sht.getRange("A1:J1000");
rng.setHorizontalAlignment('center');

}

 

結果

Range("A1:J1000")が全て中央揃えになった。

 

まとめ

セルの中央揃えを行うと列幅に入り切らなくなるセルの値が出て来る。

列幅を自動調整するスクリプトもセットする必要がある。

 

 

 

Google apps scriptで行列を挿入・削除する

Google apps scriptで行列を挿入には

 

//行挿入

✔ sheetオブジェクト.insertRows(rowIndex)

//行挿入

✔ sheetオブジェクト.insertColumns(columnIndex)

 

を使います。

 

Google apps scriptで行列を挿入する例

/*行列挿入*/
function sounyuu(){

var ss,sht

ss = SpreadsheetApp.getActiveSpreadsheet();
sht = ss.getSheetByName('シート1');

sht.insertRows(1,4);
sht.insertColumns(1);

}

 

結果

1~4行目に4行挿入され、1列目に1列挿入されました。

 

 

Google apps scriptで行列を削除するには

 

//行削除

✔ sheetオブジェクト.deleteRows(rowPosition, howMany)

//列削除

✔ sheetオブジェクト.deleteColumns(columnPosition, howMany)

 

を使います。

 

Google apps scriptで行列を削除する例

/*行列削除*/
function gyouretusakujo(){

var ss,sht

ss = SpreadsheetApp.getActiveSpreadsheet();
sht = ss.getSheetByName('シート1');

sht.deleteRows(1,4);
sht.deleteColumns(1);

}

 

結果

1~4行目、1列目が削除されました。

 

まとめ

insertは挿入、deleteは削除 で覚えておく。

ただしdeleteは

メソッド Sheet.deleteColumns は推奨されていません。

とアラームが表示されるので今後別の方法を考えるのが望ましい・・

 

 

Google apps scriptで行列を固定・解除する

Google apps scriptで行列を固定する時は

 

  • setFrozenRows(rows)
  • setFrozenColumns(columns)

 

を使う。

 

Google apps scriptで行列を固定するスクリプト

/*行と列の固定*/

function kotei(){

var ss,sht

ss = SpreadsheetApp.getActiveSpreadsheet();
sht = ss.getSheetByName('シート1');

sht.setFrozenRows(2);
sht.setFrozenColumns(8);

}

 

結果

2行目と8列目が固定される。

 

Google apps scriptで行列固定を解除するスクリプト

/*行と列の固定解除*/

function koteiclear(){

var ss,sht

ss = SpreadsheetApp.getActiveSpreadsheet();
sht = ss.getSheetByName('シート1');

sht.setFrozenRows(0);//<-行の数値の場所に0を入力
sht.setFrozenColumns(0);//<-列の数値の場所に0を入力

}

 

結果

行と列の固定が解除された。

 

まとめ

固定解除する際は「clear」でなく、固定の行列数字に「0」を入力すればOK。

 

参照元Class Spreadsheet  |  Apps Script  |  Google Developers

 

Goolge apps script 別シート参照してコピペ

Goolge apps script スプレッドシートの別シート参照してコピペする方法

 

openByIdメソッド

 

を使う。

 

Goolge apps scriptでスプレッドシートの別シートからコピペするスクリプト

 

function copypast() {

var ss,sht,sht2,sheet1,sheet2,rng,copy1

ss = SpreadsheetApp.getActiveSpreadsheet();
sheet1 = SpreadsheetApp.openById('1617Bh9s821I-Kop0w_c7EIl1IftBBjrUN-eC1fheXYc');
sheet2 = SpreadsheetApp.openById('1pvFS9K2TERuu8CnFcmo6oS8t9kzrrnkEKBY729UhVac');

//sheet1のシート1・A1:C10のセル値をコピー
sht = sheet1.getSheetByName('シート1');
rng = sht.getRange("A1:C10").getValues();
copy1 = rng.copy;
Logger.log(rng)

//sheet2のシート2へ貼付け
sht2 = sheet2.getSheetByName('シート2');
sht2.getRange("A1:C10").setValues(rng);//<-同じ範囲を指定する必要がある。

}

 

結果

sheet1の値("A1:C10")をsheet2のシート2へセット出来た。

 

まとめ

sheet2のシート2へ貼付け時、同じ範囲を指定する必要がある。

別の範囲に貼付けする際は

filter(String).length

を使ってアクティブな範囲をcopy、setする必要がある。