Google Apps Scriptを使ってスプレッドシートでgetDataRange()やgetLastRow()などのセル範囲取得メソッドを実行すると空白のみのセルも認識してしまいます。スプレッドシートを眺めて空白が入ったセルを見つけ出すのはなかなか大変と思いました。そこで、空白のみのセルを削除して文字列あるいは数値の入ったセルでの範囲指定ができるようにするための方法をご紹介します。条件は下記2点です。
-
文字列の中に入っている空白はそのまま
-
nullではない空白のみのセルを削除
方法は次の通りです。
-
シート内の使用セルとして認識される全データをgetValuesを使って配列にダウンロードする。
-
配列の中で空白のみになっている削除したい要素を"null"で上書きする。検索に正規表現を使用しているため、ここで不要なセルも同時に削除することも可能です。(削除したいセルを"null"で上書きすることで未使用セルとしての認識になります。)
-
setValuesを使って修正した配列を最初のシートへ上書きアップロードする。
getValues, setValuesで取得できるセル数の上限250個がなくなっていたこともあり、今回のような簡単なスクリプトで空白セルを削除できるようになりました。
var ss = SpreadsheetApp.getActiveSheet();
var data = ss.getDataRange().getValues();
for (var i in data){
for (var j in data[i]){
if (data[i][j].length > 0 && !/^[a-zA-Z0-9]+$/.test(data[i][j])){
data[i][j] = null;
}
}
}
ss.getRange("A1").offset(0,0, data.length, data[0].length).setValues(data);
このスクリプトでは数値とアルファベットのあるセルを正規表現を使って使用セルとして想定しています。