はじめに
今回は、GAS で Query を利用した際にハマってしまった内容です。
下部の”参考”に記載させて頂いた投稿により解決する事ができました。
次にハマった方の”検索”に少しでもヒットすればと投稿します。
ざっくり処理
- Slack Bot から値を入力・選択して、Google Apps Script へリクエスト
- Google Apps Script で、対象の Google スプレッドシートから Query で別シートに抽出
- 抽出結果を処理して、Slack Bot へ返却
問題
Google スプレッドシートで Query の処理を行っていたのですが、特定の"文字列"項目だけ値が取れない
ただ、
- 裏の処理で固定文字を入れているレコードは"文字"でも、Query で取得できる
- 対象項目の値を"文字" -> "数値"に手動で変更すると、Query で取得できる
原因
Google sheet Query Function Returns blank result from cell with data
文字列と数値の混在する列で、文字列が少数派だと勝手に空白セルに変換してしまうらしい。
→ えっ!? これはバグではないでしょうか? > Google さん
解決策
Query を修正。
=QUERY(ARRAYFORMULA(TO_TEXT('シート1'!A:X)),"select Col1... where Col1...")
- TO_TEXT : 対象を全て文字に変換
- ARRAYFORMULA : 配列数式に変換
ポイント
- Query 内で利用する項目が、"A" -> "Col1" に変わるので注意!
- 全部文字になるので、日付オブジェクトとかの項目は個別に型変換が必要になります
おわりに
stackoverflow に数年前から記載されていて、今も発生するという事は仕様なんでしょうね。。。
参考(感謝)