ひとり税理士のGAS -2.会計ソフトインポート用データを作成(5)-
前回のつづきです。
var Asheet=SpreadsheetApp.openById('1a2b3c4d5e6f7g8h9i'); // [スプレッドシートID]で取得
var Bsheet=SpreadsheetApp.getActiveSpreadsheet(); // 現在使用しているものを取得
var Asheet_X = Asheet.getSheetByName('X');
var Bsheet_Y = Bsheet.getSheetByName('Y');
var Asheet_X_Value = Asheet_X.getRange(1,1,2,3).getValues();
var array_r = [];
var vlr = Bsheet_Y.getLastRow();
if( vlr < 2 ){ vlr = 2 }
Bsheet_Y.getRange( 2 , 1 , vlr , Bsheet_Y.getLastColumn() ).clear() ;
for( var i=1; i < Asheet_X_Value.length ; i++ ){
var array_c = []; // ここで、array_c を空にしないと・・・
for( var j=1; j <= Asheet_X_Value[0].length ; j++ ){
array_c.push( Asheet_X_Value[i][j] ) ;
}
array_r.push( array_c ) ;
}
Bsheet_Y.getRange(1, 1,array_r.length,array_r[0].length ).setValues( array_r );
上のプログラム・・・一応動きますが、Asheetの行数を増やしたり減らしたり、・・・前回処理したデータが残っている・・・ということがあることがわかりました。
結果が正しく表示されるまでは、チェックが重要。
上のプログラムの修正すべき箇所→→→
[前回処理したデータのクリア]
処理前に、前回のデータをクリアにしてから始めるように修正。
データの最終行は、毎回異なります。
その最終行の取得は、
var vlr = Bsheet_Y.getLastRow();
のように、「getLastRow()」でします。
次のように、表題 (1行目)の下の行(2行目)から「getLastRow()で取得した値」の行までをクリアします。
Bsheet.getRange( 2 , 1 , Bsheet_Y.getLastRow() , Bsheet.getLastColumn() ).clear() ;
// ↑ 最終行を取得 ↑ 最終列を取得
・・・ここで、注意が必要・・・
もし、前回の結果が無しの場合、getLastRow()の値は、「表題」の行(1)になってしまいます。
なので、次のように、getLastRow()の値が「2未満」の場合には、2行目からに修正。
var vlr = Bsheet_Y.getLastRow();
if( vlr < 2 ){ vlr = 2 }
Bsheet_Y.getRange( 2 , 1 , vlr , Bsheet_Y.getLastColumn() ).clear() ;
同じように、Asheetのデータを取得する範囲も、
var Asheet_X_Value = Asheet_X.getRange(1,1,2,3).getValues();
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
var vlr=Asheet_X.getLastRow();
var Asheet_X_Value = Asheet_X.getRange(1,1,vlr,Asheet_X.getLastColumn()).getValues();
のように変更すれば、基となるデータの行数等が変更になっても対応できることになります。
今回は、ここまで。