【发布时间】:2018-07-19 06:32:09
【问题描述】:
我需要有关 Google Apps 脚本的帮助,该脚本使用模板报告文件,并通过在引用的单元格中设置 ID 号来生成个性化报告 - 这会更改动态更新的报告。
脚本正常工作,因为它为数据数组中的每个 ID 创建一个新文件。但是,所有子文件看起来都与父文件(模板)相同。它们不反映基于setValue() 对单元格C3 所做的更改。但是,在运行脚本后,模板文件确实显示 setValue 在脚本运行时对 C3 进行了更改。
parentFile.makeCopy() 是否只复制脚本运行前的源电子表格而不进行编辑?我需要其他方法吗?
另外,我将如何更改这些子文件的权限?我是否必须每次在新女儿和源电子表格之间来回更改我的活动电子表格?
感谢您的帮助!
我在下面包含了我的脚本副本:
function SpawnReports() {
// gets the current Google Sheet file
var parentFile = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())
var ss = SpreadsheetApp.getActiveSpreadsheet();
// the spreadsheet must have a sheet named ReportList with
// Column A = IDs and Column B = emails without headings on columns
var sheet = ss.getSheetByName("ReportList");
var data = sheet.getDataRange().getValues();
// determines timezone
var timeZone = Session.getScriptTimeZone();
// generates the timestamp and stores in variable
// formattedDate as year-month-date hour-minute-second
var formattedDate = Utilities.formatDate(new Date(), timeZone , "yyyy-MM-dd' 'HH:mm:ss");
// gets the destination folder using parent spreadsheet location (folder)
var parentFolder = parentFile.getParents();
var folder = parentFolder.next();
var folderId = folder.getId();
var destination = DriveApp.getFolderById(folderId);
// loops through IDs
for (var i = 0; i < data.length; i++) {
Logger.log('ID: ' + data[i][0]);
Logger.log('EMAIL: ' + data[i][1]);
// Write ID to daughter spreadsheet reference cell
sheet.getRange(1, 3).setValue(data[i][0]);
// gets the name of the original file and appends the ID and
// the timestamp stored in formattedDate
var name = SpreadsheetApp.getActiveSpreadsheet().getName() + " - " + data[i][0] + " Report " + formattedDate;
// makes copy of "parentFile" with "name" at the "destination"
parentFile.makeCopy(name, destination);
}
}
【问题讨论】:
-
您需要确保在复制模板之前执行写入(以及任何相关的公式重新计算)。另见stackoverflow.com/questions/41175326/…
标签: google-apps-script google-sheets google-drive-api