データ分割処理をしていますが、メインデータをほかのファイルに書き写す処理のfor文が回っておらず、困っております。
このスクリプトでなぜfor文が処理されていないのか先輩方から教えていただきたく、投稿いたしました。
またコード全体として、アルゴリズムの修正点などありましたら、ご教授ください。
よろしくお願いします。
function myFunction(input) { //スプレッドシートの取得 var ss=SpreadsheetApp.getActive(); //シートの取得 var sheet=ss.getSheets()[0]; //最後の列と分割単位の設定 var Lastcolumn=sheet.getLastColumn(); Logger.log("最後の列は"+Lastcolumn); var LastRow=sheet.getLastRow(); Logger.log("最後の行は"+LastRow); var Columnnumber=(Lastcolumn-1)/input; Logger.log("分割単位"+Lastcolumn); //ヘッダの取得 var header=sheet.getRange(1,1,1,Lastcolumn).getValues(); Logger.log("header"+header); //メインデータの取得 var mainData=sheet.getRange(2, 1,LastRow-1,Lastcolumn).getValues(); Logger.log("mainData"+mainData[0][0]); Logger.log("mainData"+mainData[0][1]); Logger.log("mainData"+mainData[1][0]); Logger.log("mainData"+mainData[1][1]); //データの論理スイッチ var Switch=0; // シートを作成 注意点:シートの数がいくつになるかはinputで決まるのでinputと同じ配列を用意してやる for(var i = 1; i <= 2; i++){ //新しいファイルを作成 var s=SpreadsheetApp.create("分割ファイル"+i); var newSheet=s.getSheets()[0]; //ヘッダーの値を入れる(for分で書き換える) newSheet.getRange(1,1).setValue(header[0][0]); newSheet.getRange(1,2).setValue(header[0][1]); //データは入る newSheet.getRange(2,1).setValue(mainData[0][0]); //ここまではOK //メインデータを入れる if(Switch===0){ for(var j=2;j<=Columnnumber+1;j++){ for(var k=1;k<=Lastcolumn;k++){ newSheet.getRange(j,k).setValue(mainData[j-2][k-1]); Logger.log("最初の処理"); } Switch++; } }else{ for(var j=2;j<=Columnnumber+1;j++){ for(var k=1;k<=Lastcolumn;k++){ newSheet.getRange(j,k).setValue(mainData[j][k-1]); Logger.log("最後の処理"); } } } } }
「ここまではOK」まで動作確認済みだとすれば、なんとなくinputがundefinedだからっぽいのですが、このmyFunctionを、関数を実行、で実行していませんか?どうやって実行していますか?
関数を実行で実施しています。inputに値を渡す方法として、シートに=関数(インプット)を入力したのですが、うまくいきませんでした。
関数を実行で実施しています。inputに値を渡す方法として、シートに=関数(インプット)を入力したのですが、うまくいきませんでした。
上手くいかないとは具体的にはどうなりますか?そのときログは?
シートに`=myFunction(2)`とするとcreateを呼び出す権限がないというエラーになるため、{の直後くらいで、input=2;とかを挿入したところ正常に動作しました。このようにしてテストしていただけませんか?
あなたの回答
tips
プレビュー