3

this question teaches how to adjust the folders of a file to move it into a particular folder, and out of the root.

It also suggests using folder.createFile to create it directly in the desired folder... but it appears createFile only applies to Docs... is there a way to create a spreadsheet directly in a particular folder?

4

8 回答 8

8

由于 DocsList 已被弃用,目前以下解决方案有效:

var folder=DriveApp.getFoldersByName(folderName).next();//gets first folder with the given foldername
var file=SpreadsheetApp.create(fileName);
var copyFile=DriveApp.getFileById(file.getId());
folder.addFile(copyFile);
DriveApp.getRootFolder().removeFile(copyFile);
于 2016-03-18T00:11:05.847 回答
3

使用 Apps 脚本创建电子表格不适用于常规 Google 帐户和 Google Apps 标准版帐户。但是,您始终可以制作一个虚拟电子表格的副本,然后使用 Google Apps 脚本进行相应的修改。这是一个示例代码。

function createSpreadsheetInfolder() {
  var dummySS = DocsList.getFileById('ID of dummy SS');
  var myCopy = dummySS.makeCopy('My new file');
  //Get your target folder
  var folder = DocsList.getFolder('ID or path of folder');
  myCopy.addToFolder(folder);
}
于 2012-11-30T09:44:19.337 回答
3

已经给出的答案似乎不起作用,也许它们已经过时了。

这是我的答案(对我有用)。

var folders=DriveApp.getFoldersByName("existingFolder");
while (folders.hasNext()) {
  var folder = folders.next();
  var file=SpreadsheetApp.create("the file that must be in a folder");
  var copyFile=DriveApp.getFileById(file.getId());
  folder.addFile(copyFile);
  DriveApp.getRootFolder().removeFile(copyFile);
}
于 2016-06-28T16:22:00.657 回答
1

诚然,我的答案是从以前的答案中得出的,其中没有一个完全符合我的需要。此功能已使用当前的 Google Apps 脚本和电子表格文档进行了测试。如果文件夹名称重复,它将起作用,但将文件移动到 API 返回的第一个文件夹。

// Arguments are a file object and a folder name.
function moveFileToFolder(file, folderName)
{
    var folders = DriveApp.getFoldersByName(folderName);
    var copyFile = DriveApp.getFileById(file.getId());

    if (folders.hasNext()) {
       var folder = folders.next();
       folder.addFile(copyFile);
       DriveApp.getRootFolder().removeFile(copyFile);
    }
}

于 2017-02-05T18:42:36.033 回答
1

现在可以在特定文件夹中创建 Google 电子表格。为此,您需要使用高级驱动服务 v2。从谷歌应用脚​​本编辑器的高级服务菜单中启用它。

var oFile = placeGoogleSpreadsheetInSpecificFolder("my file", "target folder id");
var oSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(oFile.getId()));

function placeGoogleSpreadsheetInSpecificFolder(sSpreadsheetName, sTargetFolderId) {
    var oGeneratedFile = Drive.Files.insert({
        "mimeType": "application/vnd.google-apps.spreadsheet",
        "parents": [{
            id: sTargetFolderId
        }],
        "title": sSpreadsheetName
    });
    return oGeneratedFile;
}

这个解决方案对我来说非常好。

于 2017-09-12T07:37:37.267 回答
0

这个问题已经回答了。 https://stackoverflow.com/a/19610700 这是一个很好的解决方案。

folder.createFile("name", '',MimeType.GOOGLE_SHEETS);

使用除空字符串以外的任何内容都会给我一个错误。

于 2014-01-14T14:50:25.280 回答
0

这段代码对我有用,我认为没有办法避免“从根目录中删除”步骤,至少我不知道。

function createSpreadsheet() {
var folder = DocsList.getFolder('GAS');// this value as test for me
var root = DocsList.getRootFolder()
var newFileId = SpreadsheetApp.create('testNewSS').getId();// this defines the name of the new SS
var newFile = DocsList.getFileById(newFileId); // begin the 'move to folder process'
newFile.addToFolder(folder);
newFile.removeFromFolder(root);// had to do it in 2 separate steps 
}
于 2012-11-30T10:13:37.567 回答
0

对于像我这样阅读这个旧答案的人来说,这只是一个“提醒”。大多数解决方案已被弃用。你必须使用“moveTo”,你不需要从根方向或其他东西中删除。

请查看此链接以获取更多详细信息。

我这样做的解决方案:

/**
 * function createSS
 * @description: Creates a new SpreadSheet with imported values and directly in provided folder
 * @param {string} ssName name of SpreadSheet
 * @param {object} sheetData values as range
 * @param {object} ssFolder reference to a folder
 */
function createSS(ssName, sheetData, ssFolder = false){
  var ss = SpreadsheetApp.create(ssName);
  ss.setSpreadsheetLocale("de");
  if(ssFolder){
    // Move to provided folder
    var file = DriveApp.getFileById(ss.getId());
    file.moveTo(ssFolder);
  }
  var sheet = ss.getActiveSheet();  
  sheet.getRange(1, 1, sheetData.length, sheetData[0].length).setValues(sheetData);    
  return sheet;
}

文件夹分配示例:

var folders = DriveApp.getFileById(ssFileId).getParents();
var folder = folders.next();
// add new file (directly in correct folder)
var sourceSheet = createSS(newFileName, relevantValues, folder);

(如果您确定您的文件仅在 1 个文件夹中,则只能以这种方式工作。否则,请使用 .hasNext() 和循环执行)

于 2020-07-31T15:35:59.507 回答