22

谁能帮帮我

我想通过特定文件夹中的 App 脚本创建电子表格。怎么做。

目前我正在做如下:

var folder = DocsList.getFolder("MyFolder");
var sheet = SpreadsheetApp.create("MySheet");
var file = DocsList.getFileById(sheet.getId());
file.addToFolder(folder);
file.removeFromFolder(file.getParents()[0]);

它不工作.......

4

9 回答 9

42

正如@Joshua 所建议的,可以使用高级驱动服务创建一个电子表格(在特定文件夹中):

var name = 'your-spreadsheet-name'
var folderId = 'your-folder-id'
var resource = {
  title: name,
  mimeType: MimeType.GOOGLE_SHEETS,
  parents: [{ id: folderId }]
}
var fileJson = Drive.Files.insert(resource)
var fileId = fileJson.id

无需使用此方法移动文件!

于 2017-01-06T16:26:21.750 回答
11

由于您不能再使用 DriveApp 创建Google Docs(Docs 或 SpreadSheets),也不能使用 addToFolder,因为DocList被弃用。只有一种方法可以创建或“移动”Google Docs 或 Google SpreadSheets..

  //"Move" file to folder-------------------------------//
  var fileID = '12123123213321'
  var folderID = '21321312312'
  var file = DriveApp.getFileById(fileID).getName()
  var folder = DriveApp.getFolderById(folderID)
  var newFile = file.makeCopy(file, folder)

  //Remove file from root folder--------------------------------//
  DriveApp.getFileById(fileID).setTrashed(true)

如您所见,这不会移动文件,它会在您想要的文件夹中创建一个具有相同名称的副本,然后将原始文件移动到垃圾箱。我很确定没有其他方法可以做到这一点。

于 2015-03-25T14:06:42.587 回答
10

另一个答案有点短(而且不是很明确)。虽然您的方法是合乎逻辑的,并且如果您更换应该可以工作

file.removeFromFolder(file.getParents()[0]); 

file.removeFromFolder(DocsList.getRootFolder());

使用新的Drive 应用程序Folder类有更好的方法来完成相同的工作,Folder 有一种创建文件的方法,您可以使用mimeType enum指定文件类型。

代码如下:

function myFunction() {
  var folders = DriveApp.getFoldersByName('YOUR FOLDER NAME'); // replace by the right folder name, assuming there is only one folder with this name
  while (folders.hasNext()) {
   var folder = folders.next();
  }
  folder.createFile('new Spreadsheet', '', MimeType.GOOGLE_SHEETS); // this creates the spreadsheet directly in the chosen folder
}
于 2013-10-26T19:02:24.417 回答
9
  folder = DriveApp.getFolderById("FOLDER_ID")
  var ss = SpreadsheetApp.create("SPREADSHEET_NAME")
  DriveApp.getFileById(ss.getId()).moveTo(folder);

您可以使用上面的代码来实现相同的目的,而无需使用高级驱动服务

于 2017-03-23T02:11:27.177 回答
6

2020 年 7 月 27 日有以下更新:

File类现在具有以下方法:

  • file.getTargetId():获取快捷方式的文件 ID。
  • file.getTargetMimeType():返回快捷方式指向的项目的 mime 类型。
  • file.moveTo(destination):将文件移动到指定的目标文件夹。

Folder 类现在具有以下方法:

  • folder.createShortcut(targetId):创建提供的 Drive 项目 ID 的快捷方式,并将其返回。
  • folder.moveTo(destination):将项目移动到提供的目标文件夹。

以下文件夹类方法已被弃用

  • 添加文件(文件)
  • addFolder(文件夹)
  • 删除文件(文件)
  • 删除文件夹(文件夹)

https://developers.google.com/apps-script/releases/#july_27_2020

因此,您可以使用以下方法在文件夹中创建电子表格文件file.moveTo(destination)

function createSpreadSheetInFolder(ss_new_name, folder_dest_id) {
    var ss_new = SpreadsheetApp.create(ss_new_name);
    var ss_new_id = ss_new.getId();
    var newfile = DriveApp.getFileById(ss_new_id);
    newfile.moveTo(DriveApp.getFolderById(folder_dest_id))
    return ss_new_id;
}

var file_name = 'SPREADSHEET NAME';
var folder_id = 'DESTINATION FOLDER ID';
var new_ssId = createSpreadSheetInFolder(file_name, folder_id)
于 2020-09-30T12:38:44.007 回答
3

您可以创建一个电子表格,然后将其添加到文件夹中。

function createSpreadSheetInFolder(name,folder){
    var ss = SpreadsheetApp.create(name);
    var id = ss.getId();
    var file = DriveApp.getFileById(id);
    folder.addFile(file);
    return ss;
}
folderId='your_folder_id'
name='my_new_ss'
folder=DriveApp.getFolderById(folderId)
createSpreadSheetInFolder(name,folder)

通过使用 folder.addFile 方法,无需使用临时文件(无需复制和删除文件)。很简单!

于 2019-06-16T03:01:27.003 回答
2

我终于得到了我的问题的答案。以下作品

var file = DocsList.getFileById(sheet.getId());
var folder = DocsList.getFolder("MyFolder");
file.addToFolder(folder);

// remove document from the root folder
folder = DocsList.getRootFolder();
file.removeFromFolder(folder);
于 2013-10-26T18:54:33.103 回答
1

什么不工作?在最后一行使用 getRootFolder。

于 2013-10-26T15:25:49.300 回答
0

可以使用此链接作为参考在文件中创建新的电子表格。

createFile(名称,内容,mimeType)

因此使用枚举 MimeType我们可以做到:

var folder = DriveApp.getFolderById("your-folder-id");
folder.createFile("My File Name","",MimeType.GOOGLE_SHEETS)
于 2019-06-03T02:56:04.443 回答