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

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

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

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

Q&A

解決済

1回答

2142閲覧

【GAS】スプレッドシートへの画像挿入プログラム

Paole

総合スコア1

Google Apps Script

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

0グッド

0クリップ

投稿2022/06/26 15:56

【前提】

当方、プログラミング経験0の初心者です。
現在、ほかの方が書かれたコードをコピーし、一つ一つ理解しながら適宜コードを変更し、プログラムを書いています。
どうしても解決できない問題がありましたので、質問させていただきます。

【実現したいこと】

GASにてGoogleFormにて収集した画像データをスプレッドシート上に挿入して、また画像データは必要に応じリサイズを行うプログラム。

【コード】 (都合上、ドライブのフォルダURLはxxxxとしています。)

1 function resize() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 ss.setActiveSheet(ss.getSheetByName('Improvement'), true); 4 var sheet = ss.getSheetByName('Improvement'); 5 var fileId = ss.getRange("D63").getValue(); 6 7 var images = sheet.getImages(); 8 9 for (var i = 0;i < images.length;i++) { 10 images[i].remove(); 11 } 12 var fileId1 = ss.getRange("F63").getValue(); 13 var res1 = ImgApp.doResize(fileId1, "300"); 14 var folder1 = DriveApp.getFolderById("xxxx"); 15 var file1 = folder1.createFile(res1.blob.setName("resized-file")); 16 var newfile1 = file1.getId(); 17 18 var response1 = UrlFetchApp.fetch("https://drive.google.com/uc?export=view&id="+newfile1); 19 var image1 = response1.getBlob(); 20 var ress1= ImgApp.getSize(image1); 21 var w1 = ress1.width; 22 var h1 = ress1.height; 23 24 25 if (w1 <= h1){ 26 var ww1 = [300-w1]/2 27 ss.insertImage(image1,34,41,ww1,0) 28 }else{ 29 var hh1 = [300-h1]/2 30 ss.insertImage(image1,34,41,0,hh1)} 31 32 var res = ImgApp.doResize(fileId, "300"); 33 var folder = DriveApp.getFolderById("xxxx"); 34 var file = folder.createFile(res.blob.setName("resized-file")); 35 var newfile = file.getId(); 36 var response = UrlFetchApp.fetch("https://drive.google.com/uc?export=view&id="+newfile); 37 var image = response.getBlob(); 38 39 var ress = ImgApp.getSize(image); 40 var w = ress.width; 41 var h = ress.height; 42 43 if (w1 <= h1){ 44 var ww1 = [300-w1]/2 45 ss.insertImage(image,3,41,ww1,0) 46 }else{ 47 var hh1 = [300-h1]/2 48 ss.insertImage(image,3,41,0,hh1)} 49 50 51 }

またこちらのライブラリをインストール?しております。
ImgApp

現状の問題点

上記のコード、30行目 InsertImage... のところで、”Exception: The blob format is unsupported.”というエラーが出てしまいます。

当該画像のリサイズ処理は行われておりましたので、同22行目まで(ライブラリのプログラム?)は問題なく処理が行えていると考えております。
なので、スプレッドシート上に画像を挿入する段階で問題が発生していると考えています。

またInsertImageメソッドは、2MB以上もしくは1024px以上の画像については処理できずエラーとなってしまうようですが、こちらも上記リサイズ処理で解決できているように考えています。
引用記事

【まとめ】

エラーメッセージにそのまま出ている通り、Blobフォーマット?に問題があるということなので、おそらく18~22行目に何か問題があるのかなと思っています。

恥ずかしながら勉強不足で、”Blob”など基礎的なことが理解できていないこともあり、解決できずにいます。

”ここをこうすればできる”など、お力添えいただければ幸いです。
稚拙な質問かもしれませんが、ご教授のほど宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

16~18行目でfetchしていますが、fileはすでに取得しているので、そのまま使えばよいと思います。

diff

1 var file1 = folder1.createFile(res1.blob.setName("resized-file")); 2- var newfile1 = file1.getId(); 3 4- var response1 = UrlFetchApp.fetch("https://drive.google.com/uc?export=view&id="+newfile1); 5- var image1 = response1.getBlob(); 6+ var image1 = file1.getBlob();

投稿2022/06/27 23:08

macaron_xxx

総合スコア3191

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

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

Paole

2022/06/30 12:25

ご返信ありがとうございます。 教えていただいた通りに書き換えてみたら、無事処理することが出来ました! ご丁寧にありがとうございました。 大変助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問