2017-12-31 65 views
0

試してみてください。新しい行をシートに書き込んでいるという問題を解読できない場合があります。私はこれを何度もやったことがあり、Logger.logを使ってこれを完全にデバッグしましたが、解決できません。ここで私がやっている内容の要約、コードスニペット、ログです:Google Script Errror:setValuesを使用しているときに「範囲の幅が正しくありません」

私は何をやっている:

  • (既存の行の下に)シートへ
  • 73新しい行の行を追加します配列に格納され保存されていますしようと、このエラーを取得し、シートに新しい行を書き込むためのグレード行
  • : 不正な範囲の幅は、1だったが26

する必要がありますここではいくつかのローを含むコードですgger.logs:


var BeginningRow = LastSGRowSheet + 1; 

var EndingRow = BeginningRow + SGPushKtr -1; 

Logger.log("BeginningRow =>" + BeginningRow + "<=, SGPushKtr =>" + SGPushKtr + "<=, Ending Row =>" + EndingRow + "<="); 

var GradesRangeString = 'A' + BeginningRow + ':' + LastStudentGradesColumnLetter + EndingRow; 

Logger.log("GradesRangeString =>" + GradesRangeString + "<="); 

StudentGradeSheet.getRange(GradesRangeString).setValues(GradeRows); 

エラーは、コードの最後の行で発生します。ここで

は、ログです:

17-12-31 11:51:15:763 EST] BeginningRow =>364<=, SGPushKtr =>73<=, Ending Row =>436<= [17-12-31 11:51:15:764 EST] GradesRangeString =>A364:Z436<=

+0

少し詳しい情報:私が書いているシートには26の列があります。それは "26"がエラーの原因です。 –

+0

GradeRowsはどのように定義されていますか?私はコードの上のあなたのテキストでそれを言及したことを知っているが、それを作成するコードを含めるためにあなたの質問を編集してください。 –

答えて

1

はのは、あなたのデータ配列が、その配列の行数がdA.lengthのdAをであることを言うと、その矩形配列を想定してみましょうその後、列の数がオムニバス0であります] .length。だから、あなたの出力コマンドはこのようなものでなければなりません。

sheet.getRange(firstRow,firstColumn,dA.length,dA[0].length).setValues(dA); 

If you'd like to learn a little more about this problem check this out.

また、ループ内の時に現在のシート一つの列にそれぞれの行を追加することができました。

+0

入力クーパーありがとう。私はこの過去の夏にgoogle Scriptでプログラミングを始めました。特定のグレーディングアプリケーションを開発しました(私は先生です)。私は、配列を使ってシートを読み書きする必要がありました。これは、Google Scriptの5分の時間制限を守るためです。私は5〜6回プロジェクトの配列を使ってシートにデータを書きました。私はいつも "to:"範囲を記述する "A4:Z100"のような値を含む文字列を使用しました。これとは対照的に、つまり、範囲を説明するために4つのパラメータを送信する方法には、それはいつも私のために働いています。しかし、あなたの方法を試すことを傷つけることはできません。私はそれをする –

+0

アプリのスクリプトの実行制限を回避する方法は、HTMLダイアログでJavascriptのタイムアウト機能から外部トリガを使用することです。 – Cooper

0

GradeRowsがあなたのコードをすべて見ずにあなたの範囲に合っていないのはなぜか分かりません。 CooperのgetRange引数を使用すると、問題が明らかになり、コードを変更するときに行と列の変数を更新する必要がなくなります。 setValues配列が範囲とまったく同じ次元である必要があるという事実は、ときどき私を得る別の問題です。 1つの行の長さが異なると、失敗します。行配列を作成するために使用するロジックが異なる長さになる可能性がある場合、以下の関数を使用して配列をシートに書き込む前に対称であることを確認します。デバッグにも役立ちます。 appendRowを()使用についてどのように

/** 
 
* Takes a 2D array with element arrays with differing lengths 
 
* and adds empty string elements as necessary to return 
 
* a 2D array with all element arrays of equal length. 
 
* @param {array} ar 
 
* @return {array} 
 
*/ 
 
function symmetric2DArray(ar){ 
 
    var maxLength; 
 
    var symetric = true; 
 
    if (!Array.isArray(ar)) return [['not an array']]; 
 
    ar.forEach(function(row){ 
 
    if (!Array.isArray(row)) return [['not a 2D array']]; 
 
    if (maxLength && maxLength !== row.length) { 
 
     symetric = false; 
 
     maxLength = (maxLength > row.length) ? maxLength : row.length; 
 
    } else { maxLength = row.length } 
 
    }); 
 
    if (!symetric) { 
 
    ar.map(function(row){ 
 
     while (row.length < maxLength){ 
 
     row.push(''); 
 
     } 
 
     return row; 
 
    }); 
 
    } 
 
    return ar 
 
}

0

?そうすれば、範囲について多くの計算をする必要はありません。あなたのデータをループして行ごとに追加することができます。このようなもの:

myDataArr = [[1,2],[3,4],[5,6]] 
myDataArr.forEach(function(arrayItem){ 
    sheet.appendRow([arrayItem[0],arrayItem[1]]) 
}) 
// This will output to the sheet in three rows. 
// [1][2] 
// [3][4] 
// [5][6] 
関連する問題