質問するログイン新規登録
Google スプレッドシート

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Q&A

解決済

3回答

4418閲覧

GoogleフォームからGoogleドライブにアップロードされた画像ファイルをスプレッドシートのimage関数で表示したい

KADO

総合スコア18

Google スプレッドシート

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

0グッド

2クリップ

投稿2019/03/22 08:40

編集2019/03/22 08:43

0

2

前提・実現したいこと

Googleフォームに投稿した内容から自動でPDFファイルを作成する過程で
Google Apps ScriptでGoogleフォームからアップロードされた画像を
image関数でスプレッドシートで表示したいと考えております。

考えている処理は以下です。
Googleフォームの操作
①フォームから画像をアップロード
→Googleドライブのフォルダに画像が保存され、スプレッドシート上にドライブへのハイパーリンクが作成される

フォームの投稿をトリガーとしたGoogle Apps Sciriptの処理
②GASによりドライブのハイパーリンクから、画像への直リンクを取得
③スプレッドシートにimage関数で直リンクを参照し、セルに画像を表示
④画像が表示されたスプレッドシートからPDFファイルを発行

当方、Gsuiteを利用している社内での運用を考えており
以下のサイトにあるフォルダを共有リンクで画像idからURLを作成するという方法ではimage関数で表示させることができませんでした

該当のソースコード

var img = DriveApp.getFileById("ドライブ内の画像id"); var imgurl = DriveApp.getUrl(img);

補足情報(参考にしたURL)

参考にしたサイト
http://posaune.hatenablog.com/entry/2013/08/14/162251
https://qiita.com/arribux/items/0394968fa318d9309d33
↑の方法ではimage関数で画像を表示できず

いまはアドオンのDigitalStamp4Sheetから手作業で画像を貼り付けています。
このDigitalStamp4SheetでもGoogleドライブ内の画像を参照しているようですが
方法は調べてみてもわかりませんでした

DigitalStamp4Sheetでは以下のようなリンクが作成されています
https://lh3.googleusercontent.com/[画像id?]

GASで上のようなリンクを取得することができる,スクリプトエディタのコードの書き方を教えていただけませんか。
よろしくお願い致します。

(追記)以下のサイトには難しくないと記載してあるのですが・・・
https://www.maruoka-digital.jp/blogcontent/5706123054/

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

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

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

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

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

hiroshi0240

2019/03/22 13:01

Image関数を使った事が無かったので試してみましたが、確かにドライブ内のファイルをIDを含む色んな表示URL入れても表示されないですね。 これ、原因と解決策有れば私も知りたいです。
guest

回答3

0

自己解決

自己解決できました
嬉しいです

var img=datass.getRange(lastrow,10).getValue();//フォーム回答よりGoogleドライブのURLを取得(これだと10列目) var imgid=img.slice(33);//URLよりIDのみ取得 var imgurl = DriveApp.getFileById(imgid).getDownloadUrl() + "&access_token=" + ScriptApp.getOAuthToken();//ファイルidからダウンロードリンクを取得 pdfss.getRange("A1").setValue(imgurl)//ダウンロードリンクをセル(A1)に貼り付け

スプレッドシートの画像を表示したいセルにてimage関数を記入

=image(A1)

リンクをセルに貼り付けることなく直接リンクをimage関数で参照できればよかったのですが
力およばず、できませんでした。

画像がどれくらいの時間表示されるか
Gsuite内で表示できるようにしても大丈夫なのか
等々、検証できておりませんが誰かの参考になれば幸いです

参考リンク
https://qiita.com/tanaike/items/9fd1294647e2181c7765

投稿2019/03/27 08:37

KADO

総合スコア18

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

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

0

https://techracho.bpsinc.jp/hachi8833/2016_11_22/29308

確認した状況とリンク先記事を踏まえると、Gsuiteを利用している社内とのことなので、社内の自前サーバー内で閉じている環境のGドライブに保存したファイルではImage関数は利用できないということでは無いでしょうか。(私の環境もまさしくこれですので同じかと思います。)

投稿2019/03/25 06:29

hiroshi0240

総合スコア640

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

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

papinianus

2019/03/25 06:41

私の回答とは路線が違う&&別回答というほどではないので、こちらに失礼します。 私も、G Suite環境で、試してみたのですが、結論として、できないっぽいです 確かに貼ってもセル内展開されません。 その上で、F5を押してシートをリロードすると、一瞬画像が表示され、「処理中」という緑のポップアップ(ではないなにものか)がメニュー付近に出たあと、表示が消えます(と同時に処理中、の表記も消えます)。 Gsuiteだと権限の問題があるから、開けないように抑制しているのでしょうね。
guest

0

参考にするサイトは参考になりませんでした。

スプレッドシートのIMAGE関数でセル内に画像を挿入する方法!

こちらを参考に

  • 公開リンクを取得した状態
  • png/gif

に対して
=IMAGE("https://drive.google.com/uc?export=download&id={{公開リンクに記載のid}}")
でセル内表示可能でした(exportがdownloadになっているのが質問者様が参考にした情報との違いです)

lh3のアドレスは、毎回違うので無理だと思います。

投稿2019/03/25 04:02

papinianus

総合スコア12705

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

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

hiroshi0240

2019/03/25 05:16

実は私も試してみたのですが、downloadに変えてみてみやっぱり表示されませんでした。ので原因は別かもしれません。
papinianus

2019/03/25 05:37 編集

hiroshi0240様 コメントありがとうございます。 再度ファイルをアップロードして別セルに同じ書式で書きましたが、表示されますね。 もし確認していただけるようなら、参考サイトの =IMAGE("https://drive.google.com/uc?export=download&id=18_qXBm8Xmm72AujK1vdYhzqrZQ9LRIal") が展開されるか見ていただけませんでしょうか?
hiroshi0240

2019/03/25 06:18

=IMAGE("https://drive.google.com/uc?export=download&id=18_qXBm8Xmm72AujK1vdYhzqrZQ9LRIal") なら表示させることができました。 が、ID部分をマイドライブ内の自分で保存したリンクを知っているドメイン内の全員に閲覧権限を設定しているファイルではやはり表示されません。 もしかして、WEB公開されているファイルでないと使えない?
KADO

2019/03/25 06:23

papinianus様 回答いただきありがとうございます。 私もhiroshi0240様と同様、表示されませんでした
KADO

2019/03/25 06:28

hiroshi0240様 質問のキモはそこなんです Gsuite環境内でも使用できないかと四苦八苦してます。 海外サイトに以下の表記であればアクセスできると記載があり lh3のアドレスに飛ぶのですが・・・ https://drive.google.com/a/ドメイン名.com/thumbnail?id={ID} 参考URL https://support.awesome-table.com/hc/en-us/articles/115002196665-Display-images-from-Google-Drive
papinianus

2019/03/25 06:49

今回の参考URLも同じですね。リロードすると消える。またlh3のアドレスはブラウザで開いたときに302で移動させて、都度生成されるURLなので、そこからどうこう、は無理じゃないかと思います(特に関数レベルでは)
papinianus

2019/03/25 07:28 編集

function myFunction() { var url = SpreadsheetApp.getActiveSheet().getRange("B2").getValue(); var eqPos = url.indexOf("="); var id = url.substring(eqPos+1); var img = DriveApp.getFileById(id).getBlob(); SpreadsheetApp.getActiveSheet().insertImage(img, 5, 5); } みたいな感じで、セルを無視すれば画像は貼りつけられますね。これを調節するのが限界ですかね。 セル内に入れる方法がimageしかないのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問