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 コメント