我创建了一个包含多个页面的模板。使用模板后,我要自动删除所有未使用的页面。
这是它的工作方式。我创建了一个包含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);
}
答案 0 :(得分:0)
如果我的理解是正确的,那么该示例脚本如何?该脚本的流程如下。
deletePages
相同时,脚本将停止。通过此流程,可以从最后一页顺序删除几页。
请复制并粘贴以下脚本,并设置变量deletePages
和id
。然后,运行脚本。
function myFunction() {
var deletePages = 3; // Please set this.
var id = "### documentId ###"; // Please set this.
var paragraph = DocumentApp.openById(id).getBody().getParagraphs();
var counter = 0;
for (var i = paragraph.length - 1; i >= 0; i--) {
for (var j = 0; j < paragraph[i].getNumChildren(); j++)
if (paragraph[i].getChild(j).getType() == DocumentApp.ElementType.PAGE_BREAK) counter++;
paragraph[i].clear();
if (counter == deletePages) break;
}
}
var deletePages = 5
。myFunction(deletePages)
之类的函数用作方法。那时,请删除var deletePages = 3;
。DocumentApp.getActiveDocument()
代替DocumentApp.openById(id)
。