有没有办法将谷歌电子表格保存为数据库中的blob,然后在应用程序脚本中打开该blob作为电子表格

时间:2016-05-06 19:35:31

标签: javascript google-apps-script google-sheets blob

我有一个非常复杂的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"
}

对此功能或解决方法的任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:0)

解决问题:

查看访问权限应足以让他们复制模板。一旦他们拥有自己的主模板副本,他们就会从里面运行您的脚本,以制作具有正确属性子集的另一个工作表。