LoginSignup
asdfghjkl99031518
@asdfghjkl99031518

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

gas 二次元配列シート出力 

解決したいこと

二次元配列をシートに出力する際にエラーが発生してしまいます。原因は恐らく二次元配列の中の配列の要素の個数が違うことから起きています。
個数を一番大きいものに揃えたいのですがどうしたらよいでしょうか。

発生している問題・エラー

Exception: データの列数が範囲の列数と一致しません。データは 30 列ですが、範囲は 45.列です。

該当するソースコード

function compare(data) {
 let newarray = []
  for(var i=1; i < 5000 ; i++){
    if(data[i][15] !== "ok")
    newarray.push(data[i])
    for(var j=2; j < 5001 ; j++){
      if(i !== j && data[i][1] === "SinglePhrase" && data[j][1] === "SinglePhrase" && data[j][15] !== "ok"){
        if (data[i][12] === data[j][12] ) {
        newarray[newarray.length - 1] = newarray[newarray.length - 1].concat(data[j]);
     data[j].push("ok") 
   }
  }
 }
}
 return newarray
}

const result = compare(data)
sheet_output.getRange(1,1,4053,45).setValues(result);

自分で試したこと

エラーの表示どおりデータを30にしたが、そうすると次はデータは 45列ですが、範囲は 30.列ですと同じ繰り返しをしてしまいました。

0

3Answer

解決法ではないですが……。

スプレッドシートのsetValuesは気難しいので、
そういうエラーの際は一行ずつで確認しながら入れた方が良いです。

あと、ググって出なかったので記憶違いの可能性もありますが、
確か同時にsetできるセル数に上限があったように思います。
(200セルだったと思うのですが、リファレンスでも出ない……)

0

Comments

  1. 50000行ほど見るので一つ一つ確認は無理なんですよね、、
  2. すみません、言い方間違えましたね。
    「一行ずつ確認」ではなく、
    「一行毎に挿入(setValues)していく」です。

    行列ともに数が多い場合、
    どのタイミングでエラーが発生しているか分かり辛いため、
    挿入の際にtry-catchでエラー箇所を確認していく方が解決の近道だと思います。

まず1点確認したいのですが、これは元データが15列あるものが結合されて30列になる想定で、実際に動かすと2つ結合されて45列になってしまうバグorデータ不備でしょうか?
それとも15の倍数列になれば想定通りなのでしょうか?

0

Your answer might help someone💌