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

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

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

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

解決済

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

Paole
Paole

総合スコア1

Google Apps Script

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

1回答

0評価

0クリップ

165閲覧

投稿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”など基礎的なことが理解できていないこともあり、解決できずにいます。

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Google Apps Script

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