ひとり税理士のGAS -2.会計ソフトインポート用データを作成(4)-
前回のつづきです。
var Asheet=SpreadsheetApp.openById(' [スプレッドシートID] '); // [スプレッドシート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 = [];
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 );
前回、ここまで作成してみたのだけど、実際動くのか・・・。
【準備】
Aスプシを新規作成し、シート名を「X」とし、データを入力したものを用意
Bスプシを新規作成し、シート名を「Y」としたものを用意します。
Bスプシでプログラムを作成します。
下図のように「拡張機能」→「Apps Script」を選択し、
「function myFunction() {」の次に、上のコードを入力します。
「myFunction」の部分・・・関数名・・・は、任意の名前でいいのですが、一部使えない名前もあります(「gas 識別子の命名規則」でクグッていただければ・・・。
プロジェクト名「無題のプロジェクト」を変更する場合は、
スクリプト名を変更する場合は、
コードを入力(以下のとおり入力してみます。エラーがでるようにわざと間違えています。)
function Data_Iki_Syori(){
var Asheet=SpreadsheetApp.openById(' [スプレッドシートID] '); // [スプレッドシート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 = [];
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 );
}
【実行】
プログラムは「実行」ボタンをクリックして動かします。
スプシの場合、プログラムを動かす「ボタンを作成する方法」とスプシの「メニューバー」にプログラムを動かすメニューを追加する方法があります(今回は説明省略)。
プログラムが正常に動かない場合は、「デバック」ボタンを使って誤りを探します。
はじめて「実行」する場合は、次のメッセージが表示されます。
このプログラムにアクセスする権限を承認しないと使えません。
アカウントを選択して、
下図のように「詳細」→「・・・(安全でないページ)」→「許可」をクリックすると、プログラムが実行されます。
実行したら、エラーが発生しました。
【デバッグ】
原因を探っていきましょう。
英語で表示されているので、わからないという人もいると思いますが、下図の丸枠部分だけで、ある程度解明できます。
スクリプト名と関数名とエラーの行が表示されています。
実行したログは、下図のように確認できます。
エラーの行をチェックします。
「[スプレッドシートID]」の部分・・・スプレッドシートIDを確認して入力するのを忘れていました。(スプレッドシートIDについては (1)を参照 )
var Asheet=SpreadsheetApp.openById('1a2b3c4d5e6f7g8h9i') ;
再度実行。
また、エラーが表示。
今度は6行目。
エラーの内容・・・よくわからないけど「parameter」が一致していない・・・みたいな。
パラメータの使い方は問題ないようにみえるけど・・・もしかしたら「getDataRange」の使い方が問題?
調べてみると「スプレッドシート内のすべてのデータ」を取得する場合に用いるもので、「getRange」が正しいみたいなので、
var Asheet_X_Value = Asheet_X.getRange(1,1,2,3).getValues();
と修正。
で、再度実行。
エラーの表示なしで終了したけど。
シートをチェック。
思った結果になっていない。
なぜだ・・・?。
下図のように、
確認した行番号ををクリックすると、ブレークポイントが設定され
「デバック」ボタンをクリックすると、上の行番号でプログラムが止まります。
右側の確認したい変数をクリックすると、各変数の値が確認できます。
以下のコードを確認したい箇所に挿入し、デバックしてみると、
console.log( [変数] ) ;
上図のように、「実行ログ」で確認したい変数の値が確認できます。
AスプシのXシートのデータの範囲は、セル「A1:H15」なので、
(Hは8列目・・・A[1列目],B[2列目],・・・,H[8列目])
var Asheet_X_Value = Asheet_X.getRange(1,1,2,3).getValues();
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
var Asheet_X_Value = Asheet_X.getRange(1,1,15,8).getValues();
1行目が移記されていないので、変数 i を 0 から
for( var i=1; i < Asheet_X_Value.length ; i++ ){
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
for( var i=0; i < Asheet_X_Value.length ; i++ ){
A列目が移記されていないので、変数 j も 0 から
for( var j=1; j <= Asheet_X_Value[0].length ; j++ ){
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
for( var j=0; j <= Asheet_X_Value[0].length ; j++ ){
・・・修正。
再度実行。
結果・・・書式は異なるが、値は元のデータが移記されていると思います。
デバッグで挿入したコードは、また使うかも知れないので、コメントアウト
// console.log(array_c);
まだ、気になる部分が・・・(次回に続く)。
この記事が気に入ったらサポートをしてみませんか?