ご訪問ありがとうございます。
Googleシートマスターのひろしです。
前回
【GAS】Googleドキュメントにスプレッドシートのデータを差し込む2
スプレッドシートから一気にデータを読み込む方法がわかります。 関数に複数の引数を渡す方法がわかります。
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
- スプレッドシート上でチェックしたデータを取得する方法がわかります。
- GASの変更方法がわかります。
逆に、知らないと
なので、サクッとマスターして
と答えてあげてください。
GASがわからなくても差し込みする方法はこちら↓
【コピペでできる】 GoogleドキュメントにGスプレッドシートからデータを差し込む
動画はこちら
シートはこちら
*クリックすることでシートが開きます。(コピーしてお使いください)
スクリプト
//テンプレートをコピーしスプレッドシートの単語に置換する
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】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);
です。
上記のやり方はかなり見当違いかもしれないのでご教授いただけたら幸いです。
var newfile = bfile.makeCopy(setdata[ID_NAME] + “_日報”, dfolder);
でうまくいきましたが、うまくいきませんか?
ご返信ありがとうございます。改めて確認したところ、うまくいきました!原因はコード.gsが複数ありカオス状態だったので、書くべきところに書けていなかったものでした。シートを綺麗にわかりやすく整理することも大切ですね・・・。お忙しいところアドバイスをいただきありがとうございます!
あるあるですね。
うまく行ってよかったです。
いつもありがとうございます。参考にしています。
スプレッドシートのセル内をURLにし、それを文字列ではなくリンクタイプのクリックできるURLで差し込みたいのですが難しいでしょうか
なるほど、確かにできると便利ですがちょっとムズいですね。
やってみたい事リストに入れておきます。
https://technical.verybestcbp.com/docinsertlink/
と
https://technical.verybestcbp.com/getlink/
で行けるかと思います。
ありがとうございます!やってみます!
いつも参考にさせて頂いております。分かりやすい説明動画を作ってくださりありがとうございます。
本応用についてですが、こちら例えば更新された最下行のデータのみを指定したい場合はどのような関数を使えばいいでしょうか
最下行のみなので、そのまま本動画のシートを使用するなら
ちょっと冗長なロジックになりますが、
for (i = 1; i < values.length; i++) { を for (i = values.length - 1 ; i < values.length; i++) { に 変更すれば、ループを最下行しか通らなくなります。