スプレッドシートの資料に指定ワードを入れ込み、複数あるシートをGoogleドライブにPDFで保存
フォーマットに複数ある指定ワードを別々で入れ込みシート化まで行くのですが、PDF化し、Googleドライブに保存までがうまくいきません。。
下記のコードがうまくいかずエラーになってしまいます。。
どうか、お力をお貸しいただくことはできますでしょうか?
【PDFexport(ssId, sheetId,tennmei[i],row, folder);//プログラムBを実行(5つの引数を渡す)】
発生している問題・エラーメッセージ
ReferenceError: row is not defined(行 42、ファイル「コード」)
//プログラムA-0|プログラム名
function Seikyusho() {
//プログラムA-1|スプレッドシートを設定
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();//変数spreadsheetに「アクティブなスプレッドシート」を設定
var sheet = spreadsheet.getSheetByName('シート1');//変数sheetに「シート1」シートを設定
var myRange = sheet.getDataRange().getValues();//スプレッドシートのデータを二次元配列として取得
//プログラムA-2|変数templateに「フォーマット」シートを設定
var template = spreadsheet.getSheetByName('フォーマット');//変数sheetに「フォーマット」シートを設定
//プログラムA-3|空の配列を設定
var tennmei = [];
//プログラムA-4|プログラム2の取引先(E列)をプログラム3の空配列に取得
for (var i=1; i<myRange.length; i++){
tennmei.push(myRange[i][4]);//配列torihikiにmyRange[i][4]を追加
}
//プログラムA-6|商品名ごとに繰り返す
for (var i=0; i<tennmei.length; i++){
//プログラムA-6-3|シートを追加して、シート名を各取引先に変更 var newsheet = template.copyTo(spreadsheet);//「請求書フォーマット」のシートをコピーする
newsheet.setName(tennmei[i]);//コピーしたシートの名前を「torihiki_list[i]」にする
newsheet.getRange('A2').setValue(tennmei[i]);//請求書のセルB4に取引先を入力 Utilities.sleep(1000); //1秒待機(待機中に情報を更新) SpreadsheetApp.flush(); //挿入したシートの情報更新
}
//プログラムA-6-8|PDF化
var ssId = spreadsheet.getId();//スプレッドシートIDを取得
var sheetId = newsheet.getSheetId();//取引先のシートIDを取得
var folderurl = newsheet.getRange('I1').getValue();//newsheetのセルJ2の値(PDF保管先のフォルダURL)
var myArray= folderurl.split('/'); //folderurlを「/」で区切る
var folderid = myArray[myArray.length-1];//変数folderidにフォルダIDを取得
var folder = DriveApp.getFolderById(folderid);//PDF保管先のfolderを設定
PDFexport(ssId, sheetId,tennmei[i],row, folder);//プログラムBを実行(5つの引数を渡す)
}
//プログラムB-0|PDF化
function PDFexport(ssId, sheetId, tennmei, row, folder) {
//プログラムB-1|PDF化の条件設定
var url = 'https://docs.google.com/spreadsheets/d/'+ ssId +'/export?';
var opts = {
exportFormat: 'pdf', // ファイル形式の指定
format: 'pdf', // ファイル形式の指定
size: 'A4', // 用紙サイズの指定
portrait: 'false', // true縦向き、false 横向き
fitw: 'true', // 幅を用紙に合わせるか?
sheetnames: 'false', // シート名を PDF 上部に表示するか?
printtitle: 'false', // スプレッドシート名をPDF上部に表示するか?
pagenumbers: 'false', // ページ番号の有無
gridlines: 'false', // グリッドラインの表示有無
fzr: 'false', // 固定行の表示有無
range : 'A1%3AG' + row, // 対象範囲「%3A」 = : (コロン)
gid: sheetId // シート ID を指定 (省略する場合、すべてのシートをダウンロード)
};
//プログラムB-2|PDF化のurl作成
var PDFurl = [];//urlという空配列を設定
for(optName in opts){
PDFurl.push(optName + '=' + opts[optName]);//opts配列の各要素を=でつないだものをurl配列に格納
}
var options = PDFurl.join('&');//urlの配列の各要素を&でつなぐ
//プログラムB-3|PDF化の条件設定
var token = ScriptApp.getOAuthToken();//アクセストークンを取得
var response = UrlFetchApp.fetch(url + options, {headers: {'Authorization': 'Bearer ' + token}}); //PDFのURLからアクセスする
var blob = response.getBlob().setName(tennmei + '.pdf');//PDFの名前を「取引先+.pdf」とする
var newFile = folder.createFile(blob);//PDFを所定のフォルダに保管する
newFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);//共有設定をする:「リンクを知っている人」が「閲覧可能」
}
ソースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー