ご訪問ありがとうございます。
Googleシートマスターのひろしです。
前回
【コピペでできる】 GoogleドキュメントにGスプレッドシートからデータを差し込む
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
- 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初心者です。
https://technical.verybestcbp.com/gasdoccommentary/
こちらの記事を拝見して、自分の作業が大変捗っており、
助かっております。ありがとうございます。
さて、2024年4月に初めて発表されたドキュメントタブにも、実装しようかと思ったのですが、スクリプトが、うまく反映されません。
hiroshiさんだったら、どのように汎用性を持たせますでしょうか。
他では、まだそのような記事を見かけませんので、
よかったら解説してほしいです。よろしくお願いします。
Chang.,Reeさん
コメントありがとうございます。
>hiroshiさんだったら、どのように汎用性を持たせますでしょうか。
う~~ん、残念ながらそれほど私の技術力は高くないのと
ゴールがボヤけるとパッションが湧きません。
個別具体的な問題でおもしろそうであればやってみます。
ご返答ありがとうございます。
>個別具体的な問題でおもしろそうであればやってみます。
ありがとうございます。
これまでご紹介いただいたスプシ知識が、メインのドキュメントだけでなく、サブドキュメントでも使えるようになると心強いです!
楽しみに待っています!^ ^