在特定文件夹中创建Google电子表格

时间:2012-11-30 08:52:29

标签: google-apps-script

this question教授如何调整文件的文件夹以将其移动到特定文件夹中,并移出根目录。

它还建议使用folder.createFile直接在所需的文件夹中创建它...但是看起来createFile只适用于文档...有没有办法直接在特定文件夹中创建电子表格?

8 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);
}

答案 2 :(得分:2)

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

这是我的答案(为我工作)。

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);
}

答案 3 :(得分: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);
    }
}




答案 4 :(得分: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;
}

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

答案 5 :(得分:0)

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

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 
}

答案 6 :(得分:0)

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

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

使用除空字符串之外的任何内容都会给我留下错误。

答案 7 :(得分:0)

对于那些像我这样阅读旧答案的人来说,只是“提神”。大多数解决方案已被弃用。您必须使用“ moveTo”,并且无需从根目录方向或其他内容中删除。

有关更多详细信息,请查看this link

我的解决方案:

/**
 * 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()和一个循环来进行操作