例えば、シート内のセルを「折り返し」にしていた場合に、「はみ出す」に変えたい場合は、セル(行や列)を全て選択して切り替え…で良いのですが、もしシートが100個あったりすると…大変な作業になります。
テキストを折り返す
Googleスプレッドシートのセルは、「折り返す」「はみ出す」「切り詰める」の3種類があります。
「はみ出す」と「切り詰める」の違いは、右側がはみ出すかどうか、という点です。
これをGASで一気に解決する方法です。
setWrapStrategy
Class RangeのsetWrapStrategyを使います。
range.setWrapStrategy(SpreadsheetApp.WrapStrategy.WRAP); //折り返す
range.setWrapStrategy(SpreadsheetApp.WrapStrategy.OVERFLOW); //はみ出す
range.setWrapStrategy(SpreadsheetApp.WrapStrategy.CLIP); //切り詰める
WRAP…折り返す
OVERFLOW…はみ出す
CLIP…切り詰める
ちなみに、WrapStrategyってどういう意味だろう…と思って調べてみると、
Wrap…包む
Strategy…戦略
包む…戦略?
まあ意味は、いいとして…
つまり、全シートの指定したセル(今回の場合は、見出し以降の、2行目~最終行)
を取得して「はみ出す」に変えてあげれば良い、ということになるかと思います。
全シート取得
まずは、スプレッドシートのデータ取得して、全シートを取得します。
開いているスプレッドシート
今、開いているスプレッドシートであれば、getActiveSpreadsheet()が使えます。
var ss = SpreadsheetApp.getActiveSpreadsheet();
ファイルを指定する場合
スタンドアロンスクリプトで、ファイルを直接指定する場合は、openById()を使います。
var ss = SpreadsheetApp.openById(‘スプレッドシートID’);
この時、ログを見てみると、変数には「Spreadsheet」という値が入っています。
これで、取得したスプレッドシートの色々なデータを扱うことが出来るようになります。
次に、全シートを取得します。
getSheets
var sheets = ss.getSheets();
これで、全シートを取得することができます。
この時、sheetsの変数をログで見ると、
[Sheet, Sheet, Sheet, Sheet, Sheet, Sheet, Sheet, Sheet, Sheet, Sheet]
このようになっています。全シートが取得?できたような状態になっています。
全シートに対して〇〇をする。
流れとしては、
シートに〇〇をする → 次のシートに〇〇をする → 次のシート・・・ → 最後のシートに〇〇をする。→ 終了
この場合は、シート数を取得して、一つ目のシートから最後のシートまでをループで実行させるという方法になりそうです。
.lengthを使います。
length
var sheets_num = sheets.length;
シート数が10個であれば、10という結果が取得できます。
ループで回す
for (i = 0; i < sheets_num; i++) {
}
これで、シート数が何個になっても、0からシート数までのループを回すことができます。
例えば、下記のようにすれば、「全部のシート名称を各シートのA1セルにそれぞれ入れる」ことができます。
sheets[i]で配列をループで回して、一つ目のシートから順番に内容を実行しています。
for (i = 0; i < sheets_num; i++) {
sheets[i].getRange(1, 1).setValue(sheets[i].getName())
}
getRange
セルデータの取得や範囲選択にはgetRangeを使います。
getRange(“1:1”).activate();
例えば、これで「1行目」を選択することができます。
あとは、これの応用でいけます。
1.2行目から最終行を選択する。
2.OVERFLOW(はみ出す)に変える。
3.シートをループで回して全シートに実行。
例えば下記のようにすれば、全てのシートのA2を「はみ出す」に変更することができます。
for (i = 0; i < sheets_num; i++) {
// → 全てのシートのA2を「はみ出す」に変更 sheets[i].getRange(2,1).setWrapStrategy(SpreadsheetApp.WrapStrategy.OVERFLOW);
}
あとは、これを応用して、2行目以降の全範囲に対してはみ出すを指定してあげれば良いということになるかと思います。
getLastRow()
sheet.getRange().activate();
スプレッドシートの最終行を取得するには、getLastRow() を使います。
var sheets_last_row = sheets.getLastRow();
このままでは取得できません。sheets変数はgetSheets()で取得した配列ですので、そのままではgetLastRowの範囲が不明になります。
使うとすれば、下記のようになります。
var sheets_last_row = sheets[0].getLastRow();
これで、最終行の値が取得できました。
あとは、これらをつなぎ合わせるだけです。
getRangeで行を取得
getRange(1 , 1)
この指定の方法の場合は、セルの取得になります。行や列を指定したい場合は、下記のようにします。
Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)
ですので、今回の場合は、
(行番号=2(2行目固定のため)、列番号=1(A列から)、行数=最終行の数 – 1(1行目分を引くため)、列数=最終列の数)としてあげれば良さそうです。
最終列の取得は、getLastRowと同じようにgetLastColumnがあります。
var sheets_last_column = sheets[0].getLastColumn();
あとは、下記のようにすれば、おそらく全部のシートで折り返しがはみ出すに変わる…はずです。
//変数を作っておく
var sheets_last_row = 0;
var sheets_last_column= 0;
//ループで回す
for (i = 0; i < sheets_num; i++) {
var sheets_last_row = sheets[i].getLastRow();
var sheets_last_column = sheets[i].getLastColumn();
sheets[i].getRange(2,1,sheets_last_row-1,sheets_last_column).setWrapStrategy(SpreadsheetApp.WrapStrategy.OVERFLOW);
}
出来ましたーー!!\(^o^)/
全シートの「折り返す」が「はみ出す」に見事変わりました!
2~3シート程度であれば、1シートずつ、全部選択して手作業で変更して…でも良いかと思いますが、もしこれが100シートもあると、えらいこっちゃです!!
そんな時はぜひGoogle Apps Scriptで解決しましょう!
それではまた\(^o^)/