【问题标题】:How to fix error - Invalid argument: file.contentType, when creating new Google Sheet如何修复错误 - 创建新的 Google 表格时参数无效:file.contentType
【发布时间】:2017-06-18 22:37:14
【问题描述】:

我正在尝试在已创建的文件夹中创建新的 Google 表格,但内容类型存在问题。

我已经搜索过这个错误,但没有找到任何东西。大多数搜索都会出现MimeType 错误,但我认为这不是问题所在。以下是我正在使用的代码:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var newFolder = DriveApp.getFolderById("MyID").createFolder("New Folder");
newFolder.createFile("myFileName",ss,MimeType.GOOGLE_DOCS);

每当我在电子表格中运行它时,都会收到以下错误:

无效参数:file.contentType(第 3 行,文件“代码”)

我尝试使用“”作为createFile 的内容。

【问题讨论】:

  • 您想从电子表格转换为文档吗?还是您只想创建新文档?因为在您的脚本中,您似乎想将电子表格的数据转换或导入谷歌文档。
  • 哇哦。我不敢相信我没有意识到这一点。我的意思是创建一个新的电子表格。我将 MimeType 更改为 .GOOGLE_SHEETS,但它仍然返回相同的错误。

标签: google-apps-script google-sheets


【解决方案1】:

下面的示例怎么样?我也不能使用 GOOGLE_SHEETS 和 GOOGLE_DOCS 的 MimeType。我不知道为什么。所以我建议使用 SpreadsheetApp.create()。流程如下。

  1. 使用 SpreadsheetApp.create() 创建电子表格。

  2. 将目标文件夹信息添加到电子表格中。

  3. 从电子表格中删除原始文件夹信息。

这样,您可以将电子表格创建到您想要的文件夹中。

脚本:

var sheetfile = "myFileName";
var destfolder = "MyID";
var sheet = SpreadsheetApp.create(sheetfile);
var file = DriveApp.getFileById(sheet.getId());
var destfolder = DriveApp.getFolderById(destfolder).addFile(file);
var docfile = file.getParents().next().removeFile(file);

更新日期:2020 年 11 月 25 日

2020年7月27日,增加moveTo(destination)的方法。并且,addFileremoveFile 的方法将被弃用。 Ref 所以,当moveTo(destination)的方法用于上面的脚本时,就变成了如下。

var sheetfile = "myFileName";
var destfolder = "MyID";
var sheet = SpreadsheetApp.create(sheetfile);
var file = DriveApp.getFileById(sheet.getId());
var destfolder = DriveApp.getFolderById(destfolder);
var docfile = file.moveTo(destfolder);
  • 当使用 Drive API 的 Files: insert 方法时,也可以使用以下脚本。 Ref

      var sheetfile = "myFileName";
      var destfolder = "MyID";
      Drive.Files.insert({title: sheetfile, mimeType: MimeType.GOOGLE_SHEETS, parents: [{id: destfolder}]});
    

【讨论】:

  • 鉴于 2020 年 9 月 30 日的 Google 驱动器更新,其中每个对象只能有一个父对象 - 我不确定这是否可行 - var docfile = file.getParents().next()。删除文件(文件);
  • @Moiz Tankiwala 感谢您的评论。在当前阶段,上面的脚本似乎有效。但是根据您的评论,我在答案中添加了其他模式。
【解决方案2】:

这个方法和我一起工作

function myFunction() {
var sheetfile = "myfilename";
var destfolder = "MYFOLDER";
var sheet = SpreadsheetApp.create(sheetfile);
var file = DriveApp.getFileById(sheet.getId());
var destfolder = DriveApp.getFoldersByName(destfolder).next();
var docfile = file.moveTo(destfolder);
}

没有下一个();它不适合我

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我没有尝试动态创建文件,而是想到了一个更简洁的解决方案,即我保留一个空电子表格(只需在驱动器中创建一个电子表格并命名为“模板”)作为制作副本的模板。

    var templateFileId = "asfashfkhsfkhfkhkashf"; //这是你必须定义为常量的东西 var destinationFolderId = "sdfashfkhaskf" var newSpreadsheet = DriveApp.getFileById(templateFileId).makeCopy("NewSpreadsheet", destinationFolderId);

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 2020-02-07
      • 1970-01-01
      • 2019-11-02
      • 2020-12-07
      相关资源
      最近更新 更多