【GAS】Googleドキュメントにスプレッドシートで指定したデータを差し込む

Google ドキュメント

GAS応用の一覧

ご訪問ありがとうございます。

Googleシートマスターのひろしです。

前回

【GAS】Googleドキュメントにスプレッドシートのデータを差し込む2
スプレッドシートから一気にデータを読み込む方法がわかります。 関数に複数の引数を渡す方法がわかります。

今回は、とっても価値の高い方法をお伝えします。


これを知ることであなたは、

  • スプレッドシート上でチェックしたデータを取得する方法がわかります。
  • GASの変更方法がわかります。

逆に、知らないと

なので、サクッとマスターして

と答えてあげてください。

GASがわからなくても差し込みする方法はこちら↓

【コピペでできる】 GoogleドキュメントにGスプレッドシートからデータを差し込む
  • Googleドキュメントの定型文にGoogleスプレッドシートのデータを差し込むことができます。
  • GASがなんのことかわからなくてもコピペで簡単にできます。
  • さらに自分用に簡単にカスタマイズできます。
  •  

     

    動画はこちら

    シートはこちら

    *クリックすることでシートが開きます。(コピーしてお使いください)

    スクリプト

    //テンプレートをコピーしスプレッドシートの単語に置換する
    function MakeDocFromTemplate() {
    
    
      const SH_NAME = "購入一覧"  //読み込みシート名
      const BASE_URI = "*****************"         //元となるファイルのURI
      const DEST_FOLDER = "**********************"    //コピー先フォルダのURI
    
    
      const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SH_NAME)
    
    
      //元となるファイルを取得
      const basefile = DriveApp.getFileById(BASE_URI)
    
    
      //コピー先のフォルダ
      const destfolder = DriveApp.getFolderById(DEST_FOLDER)
    
    
      const values = sh.getDataRange().getValues()
    
    
      // console.log(values[0])
    
    
      let setdata = []    //ステータスとURL用のバッファ
    
    
      for (i = 1; i < values.length; i++) {
        if (values[i][ID_CHECK]) {  //チェックボックスがon
          setDocdata(values[i], basefile, destfolder)
          console.log(values[i][ID_URL])
          setdata.push(["作成済み", values[i][ID_URL]])  //バッファに要素を追加する
        }
        else {
          setdata.push(["-----", ""])  //バッファに要素を追加する
        }
    
    
      }
      console.log(setdata)
      sh.getRange(2,ID_STATUS +1  , values.length - 1, 2).setValues(setdata)
    }
    
    
    // 0                1      2         3         4         5       6         7       8
    // 'チェックボックス','', '名前', '郵便番号', '住所', '受注番号', '商品名', 'ステータス', 'URL' 
    const ID_CHECK = 0  //チェックボックス
    const ID_NAME = 2  //名前
    const ID_ZIPCODE = 3  //郵便番号
    const ID_ADDRESS = 4  //住所
    const ID_ORDERNO = 5  //受注番号
    const ID_PRODUCTNAME = 6  //商品名
    const ID_STATUS = 7  //ステータス
    const ID_URL = 8  //URL
    
    
    function setDocdata(setdata, bfile, dfolder) {
    
    
      //新しいファイル名
      console.log(setdata[ID_NAME])
    
    
      const newfile = bfile.makeCopy(setdata[ID_NAME], dfolder)
    
    
      const newid = newfile.getId()
      const newurl = newfile.getUrl()
    
    
      console.log(newurl)
    
    
    
      const basedoc = DocumentApp.openById(newid)
    
    
      console.log(basedoc.getName())
    
    
      const basebody = basedoc.getBody()
    
    
      //文字列の置換
      //'', '名前', '郵便番号', '住所', '受注番号', '商品名', 'ステータス', 'URL'
      basebody.replaceText('{名前}', setdata[ID_NAME])
      basebody.replaceText('{郵便番号}', setdata[ID_ZIPCODE])
      basebody.replaceText('{住所}', setdata[ID_ADDRESS])
      basebody.replaceText('{受注番号}', setdata[ID_ORDERNO])
      basebody.replaceText('{商品名}', setdata[ID_PRODUCTNAME])
    
    
      setdata[ID_URL] = newurl //新しいURL
    
    
    }

    最後までご覧いただきありがとうございます。

    つぎはこちら

    【GAS】名前付き範囲を取得してGスプレッドシートからGoogleフォームのプルダウンに追加する
  • GASで名前付き範囲の取得ができます。
  • GASでGoogleフォームに名前付き範囲の項目を追加することができます。
  • GASでプルダウン、ラジオボタン、リストボックスの項目も追加できます。
  • GAS応用の一覧

    コメント

    1. a-bl7te より:

      いつも神スクリプトを教えていただきありがとうございます。
      “【GAS】Googleドキュメントにスプレッドシートのデータを差し込む2″のYouTube動画の方で質問させていただいた者です。
      こちらのスクリプトを元に活用させていただいています。

      ファイル名をC列「名前」だけではなく、
      たとえば[ID_NAME]+”_日報”のようにして「三木玲奈_日報」というファイル名で生成できるようにしたいのですが、

      const newfile = bfile.makeCopy(setdata[ID_NAME], dfolder)
      の部分に編集を加えてみてもエラーは起きないのですが、
      特に何も変わりなく「三木玲奈」と出ます。

      わたくしの方で実際に書いて実行してみたのが、
      ・ var newfile = bfile.makeCopy(setdata[ID_NAME] + “_日報”, dfolder);
      ・ var newfile = bfile.makeCopy(setdata[ID_NAME] & “_日報”, dfolder);
      です。

      上記のやり方はかなり見当違いかもしれないのでご教授いただけたら幸いです。

      • hiroshi より:

        var newfile = bfile.makeCopy(setdata[ID_NAME] + “_日報”, dfolder);
        でうまくいきましたが、うまくいきませんか?

        • a-bl7te より:

          ご返信ありがとうございます。改めて確認したところ、うまくいきました!原因はコード.gsが複数ありカオス状態だったので、書くべきところに書けていなかったものでした。シートを綺麗にわかりやすく整理することも大切ですね・・・。お忙しいところアドバイスをいただきありがとうございます!

    2. IRiaato より:

      いつもありがとうございます。参考にしています。

      スプレッドシートのセル内をURLにし、それを文字列ではなくリンクタイプのクリックできるURLで差し込みたいのですが難しいでしょうか

    3. ウエノ より:

      いつも参考にさせて頂いております。分かりやすい説明動画を作ってくださりありがとうございます。
      本応用についてですが、こちら例えば更新された最下行のデータのみを指定したい場合はどのような関数を使えばいいでしょうか

      • hiroshi より:

        最下行のみなので、そのまま本動画のシートを使用するなら
        ちょっと冗長なロジックになりますが、

          for (i = 1; i < values.length; i++) { を      for (i = values.length - 1 ; i < values.length; i++) {   に 変更すれば、ループを最下行しか通らなくなります。

    タイトルとURLをコピーしました