処理は正常にできるけどエラーが出るので気持ち悪い

10~15行目の

var last_row = sh.getLastRow(); //最後の行を取得(繰り返し処理の回数) var begin_row = 2; // 処理を開始する行 (1行目は項目名なので2から) var el = sh.getDataRange().getValues();

ここで最終行とスプレッドシートのデータを取得してます。

このとき el は、2次元配列ですが、配列のインデックスは「0」始まりという決まりがあります。

たとえばスプレッドシートのデータが10行であるとしましょう。
このとき、
・1行目のデータ→el[0]
・2行目のデータ→el[1]
・3行目のデータ→el[2]
・・・
・10行目のデータ→el[9]

という形で格納されます。

質問文記載のコードだと、スプレッドシートのデータが10行の場合、getLastRow関数によってlast_rowという変数は「10」になっているので

for(var i = begin_row; i <= last_row; i++) {

の部分で、 i は2から10までループされることになります。

そして、ループの最後、すなわち i が last_row =10 に等しいとき

let email_company = el[i][6];

で el[10][6] にアクセスしようとしますが、el[10]は存在しないのでundefinedになります
(なぜなら上で説明したように、el[9]までしか存在しないから)。

このため、「Cannot read properties of undefined (reading '6')」というエラーが出ます。

--- 

よってエラーが出ないように、かつ期待する動作に直すとしたら下記のようになります。(begin_rowから1を引き、last_rowの不等号を「<」に変える)

for(var i = begin_row-1; i < last_row; i++) {

コメントを投稿

0 コメント