かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Google スプレッドシート GAS replace が見つかりません。

SpreadSheet の GAS を書いていて .replace() でデータを整形しようとしたら TypeError:オブジェクト XXX で関数 replace が見つかりません。 というエラーが出てしまいました。

GASに replace メソッドが無いのかと思ったらそういう訳ではなく、値が数値だと自動変換されずにエラーになってしまうようです。

数値が入る可能性があるデータを replace する時は .toString() で文字列化する

例えば文字列で 60% や数値で 100 のような型が混在したデータを 0.6 のような形式に変換したい場合

example.gs

function dataFormat(data) {
  return data.map(function(value, index) {
    if(index === parTextCol) {
      // 数値が渡ってくるとエラーになるので一度 toString() で文字列化して % を除去する
      return (value.toString('%', '') - 0) / 100
    }
    // …
    return value
  });
}

const data = sheet.gatRange(startRow, startCol, rowNum, colNum)
  .map(function(row) {
    return dataFormat(row)
  });

 
よくよく考えたら JavaScript でも数値を .replace() しようとしたら同じエラーになるんだった…

const val = 12345;
val.replace('1', 'X');
// => TypeError: val.replace is not a function

val.toString().replace('1', 'X')
// => "X2345"

まとめ

数値に .replace() をするとエラーになるので、数値が渡ってくるのか文字列が渡ってくるのか分からない場合は .toString するのが安全

今日も一日ご安全に!


イワタニ カセットガス オレンジ 3本組 CB-250-OR

イワタニ カセットガス オレンジ 3本組 CB-250-OR