質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

4490閲覧

GASでスプレッドシートへDrive上のcsvをインポートする方法について

tarotaro2

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2021/08/01 14:13

編集2021/08/01 14:15

前提・実現したいこと

GAS(Google Apps Script) に触れて日の浅い初心者です。
おそらくめちゃくちゃなスクリプトですが、、
スプレッドシートの自動作成、加えてそのシートにGoogleDrive上のcsvファイルを
自動で読み込むスクリプトを作成しようとしているのですが、エラーが出てしまいます。

32行目の .next(); 部分がよくないのかと思うのですが、
nextメソッドについて理解できていないまま参考にしたページのコピペでやっているので
どのようにすべきかわかりません・・。
ご教示いただけると嬉しいです。

参考にしたページ:
https://qiita.com/chihirot0109/items/d78ec1a6d14783545c32

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

Exception: Cannot retrieve the next object: iterator has reached the end. CreateNewSpreadSheet @ コード.gs:32

該当のソースコード

Google

1// 実行日の日付を取得 2function getNowYearMonth(){ 3 const formatDate = Utilities.formatDate(new Date(), "JST","yyyyMM"); 4 return(formatDate); 5} 6console.log(getNowYearMonth()); 7 8// スプレッドシートの新規作成 9function CreateNewSpreadSheet() { 10 //【手順1】新規スプレッドシートをマイドライブに作成する 11 const ss = SpreadsheetApp.create(`ファイル名_${getNowYearMonth()}`).getId(); 12 13 /*addFile,removeFileメソッドのパラメータはFileオブジェクトを指定するため、 14 【手順1】で作成したスプレッドシートをFileオブジェクトとして取得する */ 15 const file = DriveApp.getFileById(ss); 16 17 //【手順2】手順1で作成したスプレッドシートを指定フォルダに「追加」する 18 const folderId = 'フォルダID'; 19 DriveApp.getFolderById(folderId).addFile(file); 20 21 //【手順3】手順1で作成したスプレッドシートをマイドライブから「削除」する 22 DriveApp.getRootFolder().removeFile(file); 23 24 console.log(ss); // スプレッドシートIDの確認 25 26 // 作成したスプレッドシートを取得 27 const sheet = SpreadsheetApp.openById(ss); 28 console.log(sheet.getName()); // アクティブなスプレッドシートのファイル名の確認 29 30 const csvFolderId = "csvのフォルダID"; 31 DriveApp.getFolderById(csvFolderId); 32 const csvFile = DriveApp.getFilesByName(`csvファイル名_${getNowYearMonth}.csv`).next(); 33 const csvData = Utilities.parseCsv(csvFile.getBlob().getDataAsString()); 34 sheet.getRange(1,1,csv.length,csv[0].length).setValues(csvData); 35 36};

補足情報(FW/ツールのバージョンなど)

業務利用のGoogleWorkspaceを利用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

| const csvFile = DriveApp.getFilesByName(csvファイル名_${getNowYearMonth}.csv).next();

指定した名前のファイルが無いからnextが失敗しているだけなのでは。

下記のコードで確認してみるといいと思います。

const files = DriveApp.getFilesByName(ファイル名); while (files.hasNext()) { const file = files.next(); console.log(file.getName()); }

投稿2021/08/01 14:51

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

draq

2021/08/01 14:54

getNowYearMonthに()がないので、Functionオブジェクトとして処理された結果ファイル名が不一致になってるのでしょうね。
tarotaro2

2021/08/02 10:57

itagagakiさん 早速ご回答ありがとうございます。draqさんご指摘の通り、関数の呼び出しがうまくいっておらずファイル名が不一致になっているせいでヒットしなかったようでした。 修正後、ご教示いただいたコードで確認したところ、ファイルがヒットしていることを確認できました。 ありがとうございました。
tarotaro2

2021/08/02 10:58

draqさん ご指摘の通りでした。ご教示いただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問