🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

Q&A

解決済

1回答

4959閲覧

GASを使ってスプレッドシートのA列の画像リストの画像をGoogleDriveにダウンロードしたい

yasuteratail

総合スコア2

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

0グッド

0クリップ

投稿2021/01/10 21:59

■試したこと
ずばりのソースが落ちてたので、試した

https://gist.github.com/kurozumi/f26c6cc75be55e61e9daadfdf6108771

■問題、エラー
Exception: Cell reference out of range
downloadImages @ コード.gs:17

var url = range.getCell(i,1).getValue();
↑ここでエラー

Cell reference out of rangeで検索して調べましたが
海外サイトばかりで行き詰ってしまいました。

GAS

1/** 2 * A列に入力された画像URLリストを元に画像をダウンロードしてGoogle Driveに保存する 3 */ 4function downloadImages() { 5 6 // 現在開いているシートを取得 7 var sheet = SpreadsheetApp.getActiveSheet(); 8 9 // 範囲はA列を指定 10 range = sheet.getRange("A1:A"); 11 12 // 画像URLが入力されている最後の行数を取得 13 var row = sheet.getLastRow(); 14 15 for (i = 0; i < row; i++) { 16 // シートから1行ずつ画像URLを取得 17 var url = range.getCell(i,1).getValue(); 18 19 // 画像データを取得 20 var response = UrlFetchApp.fetch(url); 21 var fileBlob = response.getBlob().setName(fileName); 22 23 // 取得した画像をGoogle Driveにアップロード 24 var file = DriveApp.createFile(fileBlob); 25 26 // 予め作っておいた画像フォルダの情報を取得 27 var folders = DriveApp.getFoldersByName("画像フォルダ"); 28 while(folders.hasNext()) { 29 var folder = folders.next(); 30 if(folder.getName() == "画像フォルダ"){ 31 break; 32 } 33 } 34 35 // ルートディレクトリに画像が保存されているので画像フォルダにコピー 36 file.makeCopy(file.getName(), folder); 37 38 // ルートディレクトリの画像を削除 39 file.setTrashed(true); 40 41 } 42}

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

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

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

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

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

guest

回答1

0

ベストアンサー

参考にされたURLのGitHubに掲載されてるコードが間違ってるような。

配列は0スタートですが、スプレッドシート範囲は1からなので、
この書き方だとfor文を1から開始にしてあげないといけません。

しょっぱなに range.getCell(0,1) という存在しないセルを取得しようとしてエラーになってます。

同様に最後は、最終行(row)までとしてあげる必要があります。
for文の最初の部分を以下のように変更してみてください。

処理速度向上を考えれば最初にgetValuesで取得した方が良さそうですが、まずは今のコードで動かすことを優先しています。

for (i = 1; i <= row; i++) {

投稿2021/01/11 01:18

編集2021/01/11 01:20
sawa

総合スコア3002

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

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

yasuteratail

2021/01/11 07:26

ありがとうございます! おっしゃる通りソースが間違っていました。 ご指摘の通り、ソースを変更するとエラーが解消されました。 あと, var fileBlob = response.getBlob().setName(fileName); ここのfilenameも定義されてなかったので var fileName = 'test' + i + ".jpg"; var fileBlob = response.getBlob().setName(fileName); 連番振るように変えて、無事にやりたいことができました。 解決して嬉しいです!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問