Kawaii Lab

プログラミングとかサービス開発とか

GASで文字列を置換、整形し出力する

概要

Googleスプレッドシート便利ですよね。 でもテストデータを作るときに繋げる単語をカラム毎にわけて、Join()でつなげる作業が辛くなってきたので要素だけ放り込んで出力するスクリプトを書きました。

コード

簡単に言うと、B列に書かれた文字列をresoceStatementに入れられた文字列と結合させて、同じ行のC列に出力します。 重複するデータは削除するのでいちいちGrepしなくていいので楽チンです。

まあリソースの重複削除しちゃってるので、そこは作業用シートにコピーして作業したほうがやったほうがいいかも。

function main() {
  const activeSheet = SpreadsheetApp.getActiveSheet();

  // 重複データの削除
  removeDupllicateRow(activeSheet,'B:B');
  
  // 置換文字列の設定
  const resoceStatement = "this is :'beforeReplaceKey'";
  
  // データセット
  const keyValues = activeSheet.getRange('B:B').getValues();
  getExistDataList(keyValues).forEach(function(key, index) {
    write(activeSheet, getStatement(resoceStatement, "beforeReplaceKey", key), index, 3);
  })
}

// 重複行を削除する
// targetSheet: 対象のシート
// range: 範囲
function removeDupllicateRow(targetSheet, range) {
  targetSheet.getRange(range).removeDuplicates();
}

// 値が存在するカラムのみ抽出する
// rowDataList: 範囲データが入った配列
function getExistDataList(rowDataList) {
  const list = new Array();
  rowDataList.forEach(function(value){
    if(value != null && value != "") {
      list.push(value);
    }});
  
  return list
}

// 文字列を置換する
// resorceString: 対象文字列
// beforeString: 置換前文字列
// afterString: 置換後文字列
function getStatement(resorceString, beforeString, afterString) {
   const reg = new RegExp(beforeString, "g");
   return resorceString.replace(reg, afterString);
}

// 値を書き込む
// targetSheet:対象のシート
// changeValue: 書き込む値
// rowIndex: 列番号
// columnIndex: 行番号
function write(targetSheet, changeValue, rowIndex, columnIndex) {
      targetSheet.getRange(rowIndex+1, columnIndex).setValue(changeValue);
}