google apps scriptでスプレッドシートの特定の列, 行を配列として取り込む

google apps scriptのgetRange と getValuesを利用して特定のシートの指定した範囲のセルに含まれる値を取得することができるのだが、これだと列方向に対して値を取得した際に

[["A1"], ["A2"], ["A3"], ... ]

といった形で取得され、逆に行に対して値を取得すると

[["A1", "B1", "C1", ...]]

という形で取得される。複数の行・列を指定しての範囲を指定してセルの情報を取得する場合はよいのだけれども単一の行と列を取得する場合は少し扱いにくい。

f:id:hideack:20200211113912p:plain
1次元配列で返って欲しい例

上の様になってほしいので

parseLine("シート名", "B:B");

みたいな形で呼び出すとシンプルな1次元配列で返すものを準備した。

function parseLine(sheetName, range) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var selectRange=sheet.getRange(range);
  var values=selectRange.getValues();
  var responseArray = [];
  var isCol = false;
  var isNum = new RegExp(/^[0-9]+(\.[0-9]+)?$/);
  
  if (isNum.test(range.charAt(0))) {
    for(var i=0; i<values[0].length; i++) {
      responseArray.push(values[0][i].toString());
    }
  } else {
    for(var i=0; i<values.length; i++) {
      responseArray.push(values[i][0].toString());
    }
  }
  
  return responseArray;
}

得てしてこういうのを書くと既にAPIとして備わってること多い気もするのだけれども実際どうだろう。

徒然日記 - ネギチャーシュー麺

在宅勤務3週1日目。

考え事したいところもあったのでお昼休憩を使って外に出てラーメンを食べた。珍しく散歩をしても何一つ考えはまとまらなかったがラーメンは美味しかった。醤油味玉子麺。やさしさがここにある。

f:id:hideack:20200210225333p:plain
お昼ごはんのネギチャーシュー麺

徒然日記

お約束の日曜日の週間である安住紳一郎の日曜天国を聞いた後、続けてタイムシフト神田松之丞問わず語りの松之丞を聴く。

相変わらずの番組の内容だったのだけれどもアントニオ猪木にインタビューをした話をしていてその話がとてもよかった。すべてのエンターテイナーは、どう見られているのかを常に考えているのだなと知れるエピソードだった。神田伯山襲名前最後の放送。そういえば、来週の情熱大陸はその襲名までの内容なので見なければ。

徒然日記 - 通院

通院付添。待合室で待っている間も周りはマスクの人が多く、そもそもインフルエンザが流行する時期なのではないんだっけと思いながら待ち時間を過ごした。

雑談で新型コロナウイルスの話題になる。報道で見聞きする専門家の意見もいくつか分かれてるが、現場のお医者さんによって微妙に見解が違うものだなと思う。とにかく手洗いが一番ということはわかった。

徒然日記 - fastifyのテンプレートエンジン

昨夜思いつきで雑に書いたプログラムを休憩時間にfastifyを使って動かしてみようと思ってこれまた雑に書いてみたところでHTMLを返したくなり、テンプレートエンジンのところどうするのがいいんだろうと思ってて見つけたものを使った。

github.com

まだ表に出せてないんだけどもう少し整えてgithubとかに上げたい。

こういう形で実際に思いついたのをすぐ手を動かして試してみるという感覚、しばし書いている通り忘れたくないので続けねば。激減はしてるけれども。

徒然日記 - 血圧測定, オンラインでのミーティングの準備

健康診断ぐらいでしか測ったことがなかったので測ってみた。110/83 、お陰様で正常値というか少し低いくらいか。

引き続き在宅勤務中なのだけれども自分が参加するミーティングがたまたま複数ある一日だったのであるが徐々に慣れてきたところの感想としては、実際に集まって行うミーティングのときはもちろんなのだけれども、オンラインであればなおさらのこと事前の準備が大事だなと思った。例えば、

  • そもそもスムーズに接続できるか
  • アジェンダの事前の共有
  • 画面共有するときにすぐ表示できる様にブラウザで予め開いているか

とか。

その場に全員がいるとそれとなくの空気感であったりで共有できるところもあるんだけれども*1、オンラインだとそのあたりの事情を把握できるチャネルが少ないので余計に大事になるんだろうなと思った。

*1:とはいえ実際に集まる場合も当然事前の準備大事