【GAS】지정 범위의 셀로부터 수식과 값을 모두 취득한다 (getValues()&getFormulas())

개요



getValues() 에서는 값 밖에 취득할 수 없습니다.
getFormulas()에서는 수식 밖에 취득할 수 없습니다.
수식과 값을 모두 취할 수 있는 함수를 찾을 수 없었기 때문에 만들어 보았습니다.
수요가 있는지는 수수께끼입니다.
더 좋은 방법이 있습니다! 라고 하는 경우는 코멘트 잘 부탁합니다.

아래 샘플



소스 코드



main.gs
/***********
指定範囲のセルから数式と値を取得する関数
@param:セル範囲
@return:2次元配列
************/
function getValuesAndFormulas(range){
  //getValues()でまずは値だけ取得
  var valuesAndFomulas = range.getValues();
  Logger.log("valuesAndFomulas:%s", valuesAndFomulas);

  //getFormulas()で数式を取得
  var tempFormulas = range.getFormulas();
  Logger.log("tempFormulas:%s", tempFormulas);

  //getValues()で取得した配列とgetFormulas()で取得した配列を突合
  for(column = 0; column < valuesAndFomulas[0].length; column++){
    for(row = 0; row < valuesAndFomulas.length; row++){
      //getFormulas()で取得した数式の入っている要素を代入して更新
      if(tempFormulas[row][column].length != 0){
        //空ではなく数式が入っている
        valuesAndFomulas[row][column] = tempFormulas[row][column];
      }else{
        //空の場合
        ;//何もしない
      }
    }
  }
  Logger.log("valuesAndFomulas:%s", valuesAndFomulas);
  return valuesAndFomulas;
}

function main() {
  //紐づいているスプレッドシートにアクセス
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  Logger.log(spreadsheet.getName());

  //アクティブなシートを取得
  var sheet = spreadsheet.getActiveSheet();

  //B3:D7のセル範囲を指定
  var range = spreadsheet.getRangeByName('B3:D7');
  //var range = sheet.getRange(3, 2, 5, 3);//こちらでも可

  //チェック
  var checkGetValues = range.getValues();
  Logger.log("checkGetValues:%s", checkGetValues);

  var checkGetFormulas = range.getFormulas();
  Logger.log("checkGetValues:%s", checkGetFormulas);

  var checkGetValuesAndGetFormulas = getValuesAndFormulas(range);
  Logger.log("checkGetValuesAndGetFormulas:%s", checkGetValuesAndGetFormulas);

  //書き込み
  spreadsheet.getRangeByName('F3:H7').setValues(checkGetValues);
  spreadsheet.getRangeByName('B10:D14').setValues(checkGetFormulas);
  spreadsheet.getRangeByName('F10:H14').setValues(checkGetValuesAndGetFormulas);
}


실행 결과





로그



좋은 웹페이지 즐겨찾기