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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

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

Google フォーム

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

Google Apps Script

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

Q&A

解決済

3回答

3623閲覧

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

前提・実現したいこと

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に変えてみてみやっぱり表示されませんでした。ので原因は別かもしれません。
KADO

2019/03/25 06:23

papinianus様 回答いただきありがとうございます。 私もhiroshi0240様と同様、表示されませんでした
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.48%

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

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

質問する

関連した質問