this question教授如何调整文件的文件夹以将其移动到特定文件夹中,并移出根目录。
它还建议使用folder.createFile直接在所需的文件夹中创建它...但是看起来createFile只适用于文档...有没有办法直接在特定文件夹中创建电子表格?
答案 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()和一个循环来进行操作