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

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

ただいまの
回答率

90.04%

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,765

KADO

score 12

前提・実現したいこと

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/

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hiroshi0240

    2019/03/22 22:01

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

    キャンセル

回答 3

check解決した方法

+3

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/25 15:41

    私の回答とは路線が違う&&別回答というほどではないので、こちらに失礼します。

    私も、G Suite環境で、試してみたのですが、結論として、できないっぽいです

    確かに貼ってもセル内展開されません。
    その上で、F5を押してシートをリロードすると、一瞬画像が表示され、「処理中」という緑のポップアップ(ではないなにものか)がメニュー付近に出たあと、表示が消えます(と同時に処理中、の表記も消えます)。
    Gsuiteだと権限の問題があるから、開けないように抑制しているのでしょうね。

    キャンセル

+1

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

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

こちらを参考に

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/25 15: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

    キャンセル

  • 2019/03/25 15:49

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

    キャンセル

  • 2019/03/25 16: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しかないのですね。

    キャンセル

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

  • ただいまの回答率 90.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる