前提・実現したいこと
スプレッドシートの値を配列で取り出した後に、処理をした配列を
js
1オブジェクト.getRange(,,,).setValue()
を使って一括表示させたいのですが一部のみしか表示されません。
・配列は二次元配列です。
さらに以下のようなエラーも起きていて関数にミスがないかなどを確認したのですが自分では見つけられませんでした。
######エラーメッセージ
js
1Exception: データの列数が範囲の列数と一致しません。データは x 列ですが、範囲は y.列です。
・yは毎回xより2大きい数です。
コンソールを確認しても配列の処理は最後までちゃんと行われているようで、何が原因なのかがわかりません。原因が分かる方、何が原因なのか教えてください!m(_ _)m
該当のソースコード
function myFunction() { const sheet = SpreadsheetApp.getActiveSheet(); const sheetData = sheet.getDataRange().getValues(); /*row関数→sortArr関数→list関数の順に処理することで配列を整理する。*/ let arr = row(sheetData); arr = sortArr(arr[0],arr[1]); arr = list(arr); console.log(arr); sheet.getDataRange().clear(); sheet.getRange(1,1,arr.length,arr[0].length).setValues(arr); } /*newArray[0]に文字列が格納され、newArray[1]に数字が格納される。*/ function row(array){ let newArray = [[],[]]; for(let col = 0;col < array[0].length/2;col++){ for(let row = 0;row < array.length;row++){ ele1 = array[row][col*2]; ele2 = array[row][col*2+1]; if(ele1 == "")continue; newArray[0].push(ele1); newArray[1].push(ele2); } } return newArray; } /*被った文字列をまとめて,被った回数を合計する。その後sortで並び替える。*/ function sortArr(arrStr,arrNum){ let newArray = [] let length = arrStr.length for(let i = 0;i < length;i++){ let first = i; let last = arrStr.lastIndexOf(arrStr[i]) while(first != last){ arrNum[first] += arrNum[last] arrStr.splice(last,1); arrNum.splice(last,1); last = arrStr.lastIndexOf(arrStr[i]) } length = arrStr.length newArray.push([arrStr[i],arrNum[i]]); } newArray.sort(function (a,b){ return b[1]-a[1]; }); return newArray; } /*25行目で改行というか次の列に移る関数。(例えばA(文字列),B(数字)のセットが25行目まで言ったら26個目はC,Dに移る、、を繰り返す。)*/ function list(array){ array.forEach(function(value,index,array){ if(newArray.length < 25)newArray.push([]) rank1 = newArray[index%25] rank1.push(value[0],value[1]) }) return newArray; }
コードの可読性が悪くて申し訳ないです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/23 23:47