概要
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);
}