こういうシートがあって
以下のような一次元配列にしたい
[2019/12/13, 2019/12/14, 2019/12/15, 2019/12/16, 2019/12/17, 2019/12/18, 2019/12/19, 2019/12/20, 2019/12/21, 2019/12/22, 2019/12/23, 2019/12/24]
コード.gs
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var resultArray = [];
var range = sheet.getRange(2, 1, lastRow, 1);
var values = range.getDisplayValues();
values = arrayPushApply(values);
Logger.log(values);
}
//二次元配列を一次元配列にして返す
function arrayPushApply(array){
for(var i = 1; i < array.length; i++){
Array.prototype.push.apply(array[0], array[i]);
}
return array[0]
}
|
A列の値を5行ずつ実行してみる
コード.gsfunction myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var resultArray = [];
var startRow = 2;
var numRow = 5;
var iterate = Math.round(lastRow / numRow) + 1;
Logger.log(iterate)
for(var i = 0; i < iterate; i++) {
var range = sheet.getRange(startRow, 1, numRow, 1);
var values = range.getDisplayValues();
values = arrayPushApply(values);
values = values.filter(function(value) { return value !== ''; });
if(values.length > 0) {
resultArray.push(values)
startRow = startRow + numRow;
}
}
resultArray = arrayPushApply(resultArray);
Logger.log(resultArray);
}
//二次元配列を一次元配列にして返す
function arrayPushApply(array){
for(var i = 1; i < array.length; i++){
Array.prototype.push.apply(array[0], array[i]);
}
return array[0]
}
|
A列の値を5行ずつを2回実行して
次回実行時は12行目から実行したい
スクリプトのプロパティにstartRowというプロパティを作って初期値2をセットしておく
実行する度にstartRowにnumRowsの値が足されて
最終行よりも大きくなると初期値の2に戻す
処理が重くて一度で終わらない場合(6分またはG suiteの場合30分が実行の上限)
複数回に分けて実行できるようにしたいので、
スクリプトのプロパティを利用して以下のようなコードで実現しました。
コード.gsfunction myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var resultArray = [];
var numRow = 5;
var iterate = 2;
for(var i = 0; i < iterate; i++) {
var startRow = getProp('startRow');
var range = sheet.getRange(startRow, 1, numRow, 1);
var values = range.getDisplayValues();
values = arrayPushApply(values);
values = values.filter(function(value) { return value !== ''; });
if(values.length > 0) {
resultArray.push(values)
setProp('startRow', parseInt(startRow) + numRow);
} else {
setProp('startRow', 2);
}
}
resultArray = arrayPushApply(resultArray);
Logger.log(resultArray);
}
//二次元配列を一次元配列にして返す
function arrayPushApply(array){
for(var i = 1; i < array.length; i++){
Array.prototype.push.apply(array[0], array[i]);
}
return array[0]
}
function getProp(key) {
return PropertiesService.getScriptProperties().getProperty(key);
}
function setProp(key, value) {
PropertiesService.getScriptProperties().setProperty(key, value);
}
|

