GASで取得したデータからファイル名を取得したい

実現したいこと

Googleドライブに入っているPDFのファイル名を取得したい。
常に一番最後のデータのみを抽出したいです。

前提

PDF化したスプレッドシートをメール送信したく、現状それが叶わない。
スプレッドシート(I=会員番号・J=名前・K=済・L=メールアドレス)※済=PDF化完了。これはGASで操作

I・J・Kはarrayformulaでデータを取得しています。漏れがあると困るので、「済」と記入される列を基にコードを作ったものの、1000行までの空のデータを引っ張て来てしまい、入力されたデータのみの抽出ができません。

発生している問題・エラーメッセージ

永遠と続きます。。。
var lastRow = sh1.getRange(sh1.getMaxRows(),10).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
console.log(lastRow);ここで1001となります。10=「済」(K列)

### 該当のソースコード function sendEmail(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh1 = ss.getSheetByName('#発行元データ'); //var values = sh1.getRange(3,9,3,4).getValues();これだと上手くいくが、データ追加されるとダメ、、、 // データを取得する var lastRow = sh1.getRange(sh1.getMaxRows(),10).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); console.log(lastRow);//1001 var values = sh1.getRange(3,9,lastRow-2,4).getValues(); console.log(values);//全てのデータ for(var value of values) { var userId = value[0]; var userName = value[1]; var userEmail = value[3]; console.log(value[0])//会員番号を取得 var folder = DriveApp.getFolderById('ここにフォルダーID'); var files = folder.getFiles(); var file = files.next(); //console.log(file.getName());//ファイル名を取得 var fileName = file.getName(); console.log(fileName);//ファイル名を取得 var fileUserId = fileName.split('No.')[1].split('_')[0]; console.log(fileName.split('No.')[1].split('_')[0]); //fileName.split(''); if(fileUserId == userId){ var recipient = userEmail; var subject = '領収書PDFを送信します'; var body = `${userName}様\n\n いつもお世話になっております。\n\n\会計でございます。先日はご入金ありがとうございました。\n\n\ つきましては、領収書PDFを添付させていただいておりますので、ご査収のほどよろしくお願い申し上げます。\n\n`; var options = { 'name' : '会計', attachments:[file], }; GmailApp.sendEmail(recipient, subject, body, options); } } } ### 試したこと function sendEmail(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh1 = ss.getSheetByName('#発行元データ'); //var values = sh1.getRange(3,9,3,4).getValues(); すでに入力されているデータ範囲のみだと正常に作動します。 // データを取得する var lastRow = sh1.getRange(sh1.getMaxRows(),11).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); console.log(lastRow);//1001 var values = sh1.getRange(3,9,lastRow-2,4).getValues(); console.log(values);//全てのデータ メールアドレスを基にしても永遠と動き続けます。

コメントを投稿

0 コメント