【GASスクリプト解説】 Googleドキュメントにスプレッドシートからデータを差し込む

応用

GAS応用の一覧

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

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

前回

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


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

    • GoogleスプレッドシートからGoogleドキュメントに埋め込むGASの詳細がわかります。
    • ループを使った項目の読み込み方がわかります。

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

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

    動画はこちら

    スクリプトはこちら

    スクリプト

    const SH_NAME = "一覧"  //読み込みシート名
    const SH_NAME_SETTING = "設定"  //設定シート名
    const STS_END = "作成済み"
    
    
    const ID_STATUS = 0  //ステータス
    const ID_URL = 1  //URL
    
    
    
    
    /**
     * メニューの追加
     */
    function onOpen() {  //シート読み込み時に実行
      const customMenu = SpreadsheetApp.getUi()
      customMenu.createMenu('メニュー')     //メニューバーに表示するメニュー名
        .addItem('ドキュメントの出力', 'MakeDocFromTemplate') //メニューアイテム
        .addToUi()
    }
    
    
    /**
     * テンプレートをコピーしスプレッドシートの単語に置換する
     */
    function MakeDocFromTemplate() {
    
    
      const shenv = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SH_NAME_SETTING)
    
    
      const BASE_URI = shenv.getRange("B2").getValue()
      const DEST_FOLDER = shenv.getRange("B4").getValue()
    
    
      const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SH_NAME)
    
    
      //元となるファイルを取得
      const basefile = DriveApp.getFileById(BASE_URI)
    
    
      //コピー先のフォルダ
      const destfolder = DriveApp.getFolderById(DEST_FOLDER)
    
    
      const values = sh.getDataRange().getValues()
    
    
      let setdata = []    //ステータスとURL用のバッファ
    
    
      for (i = 1; i < values.length; i++) {
        setDocdata(values[0], values[i], basefile, destfolder)
        // console.log(values[i][ID_URL])
        setdata.push([STS_END, values[i][ID_URL]])  //バッファに要素を追加する
      }
      console.log(setdata)
      sh.getRange(2, ID_STATUS + 1, values.length - 1, 2).setValues(setdata)
    }
    
    
    /**
     * テンプレファイルをコピーし
     * コピーしたドキュメント内の文字列を置換する
     * items      項目の要素
     * setdata    置換する文字列群
     * bfile      テンプレファイル
     * dfolder    コピー先
     */
    function setDocdata(items, setdata, bfile, dfolder) {
    
    
      // console.log("items=", items)
      // console.log("setdata=", setdata)
    
    
      //新しいファイル名
      console.log(setdata[ID_URL + 1])
    
    
      const newfile = bfile.makeCopy(setdata[ID_URL + 1], dfolder)
    
    
      const newid = newfile.getId()
      const newurl = newfile.getUrl()
    
    
      const basedoc = DocumentApp.openById(newid)
    
    
      const basebody = basedoc.getBody()
    
    
      //各項目の文字列を置換する
      for (let i = ID_URL + 1; i < items.length; i++) {
        // console.log('{' + items[i] + '}', setdata[i])
        basebody.replaceText('{' + items[i] + '}', setdata[i])
      }
      setdata[ID_URL] = newurl //新しいURL
    
    
    }
    
    

     

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

    GAS応用の一覧

    コメント

    1. Chang.,Ree より:

      通りかかりのGAS初心者です。
      https://technical.verybestcbp.com/gasdoccommentary/
      こちらの記事を拝見して、自分の作業が大変捗っており、
      助かっております。ありがとうございます。

      さて、2024年4月に初めて発表されたドキュメントタブにも、実装しようかと思ったのですが、スクリプトが、うまく反映されません。

      hiroshiさんだったら、どのように汎用性を持たせますでしょうか。
      他では、まだそのような記事を見かけませんので、
      よかったら解説してほしいです。よろしくお願いします。

      • hiroshi より:

        Chang.,Reeさん
        コメントありがとうございます。
        >hiroshiさんだったら、どのように汎用性を持たせますでしょうか。
        う~~ん、残念ながらそれほど私の技術力は高くないのと
        ゴールがボヤけるとパッションが湧きません。

        個別具体的な問題でおもしろそうであればやってみます。

        • Chang.,Ree より:

          ご返答ありがとうございます。
          >個別具体的な問題でおもしろそうであればやってみます。
          ありがとうございます。
          これまでご紹介いただいたスプシ知識が、メインのドキュメントだけでなく、サブドキュメントでも使えるようになると心強いです!

          楽しみに待っています!^ ^

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