下面有一些代码,它获取 Google 表格文件中的所有选项卡(不包括其中 2 个),并为每个选项卡创建独立的 Google 表格文件。目前,它们默认保存在根文件夹(我的云端硬盘)中,但我希望将它们创建在与我调用 Google Apps 脚本的文件相同的事件文件夹中。有谁知道我如何使用下面的代码做到这一点?我还想避免首先在“我的云端硬盘”中创建它,然后移动到共享云端硬盘的情况。这样做的原因是因为其他人可能会运行此代码,而我想避免出现“我的云端硬盘”中的文件夹需要根据运行此脚本的人在代码中进行更新的情况。
为简洁起见,我上面段落的简化版本:如何调整以下代码,以便创建的 Google 表格文件显示在事件的 Google 共享云端硬盘文件夹中?我将启用 Drive API。
我当前的代码:
function copySheetsToSS(){
var ss = SpreadsheetApp.getActive();
for(var n in ss.getSheets()){
var sheet = ss.getSheets()[n];
var name = sheet.getName();
if(name != 'ControlTab' && name != 'RawData'){
var alreadyExist = DriveApp.getFilesByName(name);
while(alreadyExist.hasNext()){
alreadyExist.next().setTrashed(true);
}
var copy = SpreadsheetApp.create(name);
sheet.copyTo(copy).setName(name);
copy.deleteSheet(copy.getSheets()[0]);
}
}
}
最佳答案
按照你的情况,当你的脚本修改后,进行如下修改如何?
修改后的脚本:
在此修改中,使用了 Drive API。所以,please enable Drive API at Advanced Google services .
function copySheetsToSS() {
var ss = SpreadsheetApp.getActive();
var folderId = DriveApp.getFileById(ss.getId()).getParents().next().getId();
for (var n in ss.getSheets()) {
var sheet = ss.getSheets()[n];
var name = sheet.getName();
if (name != 'ControlTab' && name != 'RawData') {
var alreadyExist = DriveApp.getFilesByName(name);
while (alreadyExist.hasNext()) {
alreadyExist.next().setTrashed(true);
}
var newSS = Drive.Files.insert({ title: name, mimeType: MimeType.GOOGLE_SHEETS, parents: [{ id: folderId }] }, null, { supportsAllDrives: true });
var copy = SpreadsheetApp.openById(newSS.id);
sheet.copyTo(copy).setName(name);
copy.deleteSheet(copy.getSheets()[0]);
}
}
}
- 在此修改中,首先检索电子表格的父文件夹。并且,在循环中,使用 Drive API 在特定文件夹中创建新的电子表格。
注意:
- 此时需要具有该文件夹的写权限。请注意这一点。
引用文献:
关于google-apps-script - Google Apps 脚本 - 如何更改代码以在事件 Google 云端硬盘共享文件夹而不是根(我的云端硬盘)文件夹中创建 Google 表格文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73030543/