我有一个非常复杂的Google电子表格,我将其用作模板来创建另一个电子表格。工作表具有格式,命名范围,数据验证,公式,数据,权限等。代码将选择模板电子表格中的某些工作表并将其复制到新电子表格。 执行此操作的代码示例:
var s = "complexity";
var srcsheet = ss_src.getSheetByName(s);
var newsheet = srcsheet.copyTo(ss).setName(s).hideSheet();
rebuildNamedRange(ss,newsheet);
var rule = ss_src.getSheetByName(s).getRange("C2").getDataValidation();
newsheet.getRange("C2:C99").clearDataValidations();
newsheet.getRange("C2:C99").setDataValidation(rule);
copySheetProtections(srcsheet,newsheet);
问题是“copyTo”功能要求用户具有电子表格的编辑权限。显然这并不理想。
有没有办法将Google电子表格另存为数据库中的blob,然后在应用脚本中打开该blob作为电子表格? 我试过以下无济于事。
测试#1
function getBlob() {
var doc = SpreadsheetApp.openById(SRC);
var docContentBlob = doc.getBlob();
copyBlobSheet(docContentBlob);
}
function copyBlobSheet(blob) {
var dst = SpreadsheetApp.openById(DST);
blob.setContentType('application/vnd.google-apps.spreadsheet'); // tried with and without this
var newDocfromBlob = DriveApp.createFile(blob).setName("doc from blob");
var src = SpreadsheetApp.open(newDocfromBlob); // this fails
src.getSheetByName("one").copyTo(dst).setName("copy of one success");
}
测试#2
function getBlob() {
var doc = SpreadsheetApp.openById(SRC);
var docContentBlob = doc.getBlob();
copyBlobSheet(docContentBlob);
}
function copyBlobSheet(blob) {
var dst = SpreadsheetApp.openById(DST);
blob.setContentType('application/vnd.google-apps.spreadsheet'); // tried with and without this
var file = {
title: 'advanced_test',
mimeType: 'application/vnd.google-apps.spreadsheet'
};
newFile = Drive.Files.insert(file, blob); // this fails with "invalid mime type"
}
对此功能或解决方法的任何想法都将不胜感激!
答案 0 :(得分:0)
解决问题:
查看访问权限应足以让他们复制模板。一旦他们拥有自己的主模板副本,他们就会从里面运行您的脚本,以制作具有正确属性子集的另一个工作表。