【发布时间】:2019-05-13 16:52:20
【问题描述】:
我创建了一个包含多个页面的模板。使用模板后,我想自动删除任何未使用的页面。
这就是它的工作原理。我创建了一个包含 25 页的证书模板,其中包含用于名称和其他详细信息的占位符。每一页都是一张证书。浏览数据后,下面的代码将占位符替换为来自 Google 表格的数据。完成后 - 我想删除文档中所有多余的页面 - 例如:如果只修改了 5 个模板页面,我想从文档中删除剩余的 20 个模板页面。
欢迎任何其他改进建议,因为这是我的第一个应用脚本。
补充澄清问题:
该脚本从包含数百行数据的 Google 表格中获取数据。例如,如果需要创建 5 个证书,则脚本会获取所有数据并循环并查找某个标志 (cert_data[i][6] == 1) 来标识应该用于证书的数据行.一旦找到标志,行中的数据就会存储在变量中,并用于替换模板文件中的占位符。一旦所有标记行中的数据都被替换 - 对于此示例,仅替换 5 个模板页面。因此,模板中将有 20 个页面未使用的余额 - 我想删除这些页面。
function createDocument() {
//Setting ID for database
var SPREADSHEET_ID = "doc ID"
var spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID);
var worksheet = spreadsheet.getSheetByName("Sheet1");
var cert_data = worksheet.getDataRange().getValues();
//Setting template ID
var templateId = 'template ID goes here';
//Make a copy of the template file
var documentId = DriveApp.getFileById(templateId).makeCopy().getId();
//Get the document body as a variable
var body = DocumentApp.openById(documentId).getBody();
//Foramt date
var curDate = Utilities.formatDate(new Date(), "GMT+1", "dd MMMM yyyy")
var d = 0;
//Looping through all the data that is in the Google Sheet
for(var i = 1; i < cert_data.length ; i++){
var curdata = cert_data[i][6];
//Checking if the row data is to be used to create certificate
if (cert_data[i][6] == 1) {
var training_type = cert_data[i][12];
var hours = cert_data[i][9];
var user_name = cert_data[i][1];
var NIC = cert_data[i][3];
var date_completed = Utilities.formatDate(cert_data[i][8], "GMT+1", "dd MMMM yyyy");
var company = cert_data[i][2];
var cert_number = cert_data[i][0];
var date_now = curDate;
//Setting training names
if (training_type == "01G") {training_type = "Basic First Aid" + String.fromCharCode(10) + "& Automated External" + String.fromCharCode(10) + "Defibrillator Certificate"; var file_name = 'AED Training';}
if (training_type == "01B") {var file_name = 'Refresher Receipts';}
d++;
//Insert the data into the file
body.replaceText('{training_type' + d + '}', training_type);
body.replaceText('{hours' + d + '}', hours);
body.replaceText('{name' + d + '}', user_name);
body.replaceText('{NIC' + d + '}', NIC);
body.replaceText('{date_completed' + d + '}', date_completed);
body.replaceText('{company' + d + '}', company);
body.replaceText('{cert_numb' + d + '}', cert_number);
body.replaceText('{date_now' + d + '}', date_now);
}
}
//d is the number of pages used from the template file
//I want to delete all the balance pages (i.e. 25-d = x)
//Rename the copied file
DriveApp.getFileById(documentId).setName(file_name + ' - ' + company);
}
【问题讨论】:
-
能否提供
any unused page的详细信息?顺便说一句,如果您想使用 Google Apps 脚本实现此目的,您能否提供您当前的脚本?这样,它将帮助用户思考您的解决方案。 -
添加细节 - @Tanaike
-
感谢您添加信息。我可以问你更新的问题吗? 1. 请解释一下你的脚本。如果您的脚本有问题,也请出示。 2. 我无法理解
only 5 template pages are modified使用脚本。怎么知道5个模板页面是否被脚本修改了? -
在问题和代码中添加了更多的 cmets。脚本没有问题。 @田池
-
感谢您的回复和补充信息。但不幸的是,我还无法想象您的情况。所以我现在想不出你的解决方案。当我能完全理解你的情况时,我会想你的解决方案。对于这种情况和我糟糕的英语水平,我深表歉意。
标签: google-apps-script google-docs