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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CORS

CORSとはCross-Origin Resource Sharingの頭文字をとったもので、ブラウザがオリジン以外のサーバからデータを取得するシステムのことです。

Q&A

解決済

1回答

5507閲覧

GAS insetImageのエラー 画像配置側の設定の問題?

ssmxgo

総合スコア178

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CORS

CORSとはCross-Origin Resource Sharingの頭文字をとったもので、ブラウザがオリジン以外のサーバからデータを取得するシステムのことです。

0グッド

1クリップ

投稿2019/06/10 05:15

編集2019/06/10 05:28

前提・実現したいこと

とあるサイトを参考にGASからSpreadsheetに画像を設定することを試しました。
Container bound script? spreadシートに直結するscriptに以下のコードを書きました。

GoogleAppScript

1function myFunction() { 2 var url="http://XXXXX.xsrv.jp/assets/images/gazou.jpg"; 3 var response = UrlFetchApp.fetch(url); 4 var image = response.getBlob(); 5 6 var ss = SpreadsheetApp.getActiveSpreadsheet(); 7 var s = ss.getSheetByName("シート1"); 8 s.insertImage(image, 1, 1); 9 SpreadsheetApp.flush(); 10}

すると、

実行に失敗: サービス エラー: スプレッドシート(行 XX、ファイル「コード」)
-->> s.insertImage(image, 1, 1); これに対するエラー

いろいろやった挙げ句、URLを変え、teratailのプロフィール画像のアドレスに変更してみると正しく挙動しました
var url="http://XXXXX.xsrv.jp/assets/images/gazou.jpg";

var url="https://teratail-v2.storage.googleapis.com/uploads/avatars/17768/fO27HFnJ_thumbnail.jpg";

イメージ説明

以上のことから、多分、サーバー側の設定の問題なのではないか、と思うのですが
ここからどう調べていいのかわかりません。
サーバーはエックスサーバーになります。

もしかしたら推測とは全然違う答えかもしれませんが、
どうぞお力添えお願い致します。

参考情報

htaccess

1# Options +FollowSymlinks 2RewriteEngine On 3RewriteBase / 4 5RewriteRule ^(manager|assets)/.*$ - [L] 6RewriteRule .(jpg|jpeg|png|gif|ico)$ - [L] 7 8RewriteCond %{REQUEST_FILENAME} !-f 9RewriteCond %{REQUEST_FILENAME}/index.html !-f 10RewriteCond %{REQUEST_FILENAME}/index.php !-f 11RewriteRule . index.php [L]

補足

画像サイズの制限かもしれません(・・;

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

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

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

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

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

kisojin

2019/06/10 06:09

1. 「…画像サイズの制限かもしれません」について、エラーが発生する際の挿入したい画像の縦横サイズをお聞きしてもよろしいでしょうか。 2. もしもダウンロード時にエラーが発生すると、UrlFetchApp.fetch(url)でエラーが発生してしまいますので、ダウンロード自体はできているのではないかと思われます。そこで、ダウンロードしたblobをGoogle Driveへファイルとして保存した場合、挿入したい画像としてファイル保存されるかどうかについては如何でしょうか。この時にファイルの縦横サイズについてもわかるかと思われます。
ssmxgo

2019/06/10 06:43

ご丁寧なお返事ありがとうございます。ほぼサイズであると確信していますが、blobで取り込んだ画像をscript内でサイズ変更すべきか、セルに充てがうと結局画像がボヤケルなど頭を抱えていました。 1.2500x3200px程度でしたが、縦サイズを1000pxに抑えることで読み込めたのでサイズ問題かと思います。 2.response = UrlFetchApp.fetch(url);実際ここで問題が起こっている認識は無いです。(見方がわからない?スクリプ停止はinsertImage) Google Driveへファイルとして保存した場合、挿入したい画像としてファイル保存されるかどうかについては如何でしょうか。この時にファイルの縦横サイズについてもわかるかと思われます。 申し訳ございません、これはどのような意味になるでしょうか? GoogleDriveへの一時保存で解決できるならの選択肢としてはありかと思います。 代替手段として、 image = response.getBlob(); ここから、サイズ変更が可能か頭抱えてました。 関数のimage()だと画像が荒くなるし…
guest

回答1

0

ベストアンサー

ご返事ありがとうございます。いただいたご返事の状況から、おそらく発生しているエラーの原因は画像の縦横サイズによるものと思われます。このサイズの変更についてですが、例えば次のようなライブラリは如何でしょうか。https://github.com/tanaikech/ImgApp このライブラリではサイズを変更するためにDrive APIを使用するため、残念ながらblobのみでサイズを変更することはできず、一時ファイルを作成する必要があります。使用した感じでは特に画像が荒くなったようには思われませんでしたが、これについては定量的な説明ができず申し訳ありません。この場合ご使用中のスクリプトを変更する場合は次のようにします。

まずはライブラリをインストールしてからスクリプトを実行してみてください。

変更したスクリプト

javascript

1var url="http://XXXXX.xsrv.jp/assets/images/gazou.jpg"; 2var response = UrlFetchApp.fetch(url); 3var image = response.getBlob(); 4 5// 画像をファイルとしてGoogle Driveに保存 6var file = DriveApp.createFile(image); 7 8// 保存した画像をライブラリを使ってファイルサイズを変更(サンプルとして横サイズを640ピクセルにました) 9var res = ImgApp.doResize(file.getId(), 640); 10 11var ss = SpreadsheetApp.getActiveSpreadsheet(); 12var s = ss.getSheetByName("シート1"); 13s.insertImage(res.blob, 1, 1); 14 15// 一時保存した画像ファイルをゴミ箱へ入れる 16file.setTrashed(true);

参考

投稿2019/06/10 07:10

編集2019/06/10 07:12
kisojin

総合スコア899

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

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

ssmxgo

2019/06/10 07:36

凄まじく便利なライブラリですね、秒速で実現できました。 ちょうど、Githubでひっかかるアカウントをフォローしたらまさにその方の作品でした。 その周辺のDriveのcreatfile setTrasheあたりも自分で調べたらとんでもなく時間がかかってしまいました。 本当にありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問