【发布时间】:2014-10-21 03:17:00
【问题描述】:
我想遍历某个工作表的所有单独选项卡(最好跳过需要排除的数组选项卡)。对于每个单独的选项卡,我想将其保存为 Google 驱动器中的单独工作表,并将选项卡的标题作为文件名。如果文件名已存在,则应将其覆盖。
最好我希望能够在所需的脚本中排除一组工作表(例如,名为“master”和“test”)。
很遗憾,我对 Google Apps 脚本的了解不足以自己编写它。任何工作示例都受到高度赞赏。
编辑:这是我解决它的方法(总是欢迎提出改进建议!:-)) EDIT2:更改了 deleteSheet 行
function copySheetsToSS() {
var ss = SpreadsheetApp.getActive();
for(var n in ss.getSheets()){// loop over all tabs in the spreadsheet
var sheet = ss.getSheets()[n];// look at every sheet in spreadsheet
var name = sheet.getName();//get name
if(name != 'master' && name != 'test'){ // exclude some names
var alreadyExist = DriveApp.getFilesByName(name);// check if already there
while(alreadyExist.hasNext()){
alreadyExist.next().setTrashed(true);// delete all files with this name
}
var copy = SpreadsheetApp.create(name);// create the copy
sheet.copyTo(copy).setName(name); // rename copied sheet to same name as SS
copy.deleteSheet(copy.getSheets()[0]);// delete default Sheet1 from new copy
}
}
}
【问题讨论】:
-
2 cmets 关于您刚刚添加的代码的最后一部分(不提及第一部分的来源):如果您的来源有一个名为
Sheet1的工作表,sheet.copyTo(copy).setName(name)将失败(错误 =sheet此名称已存在)和 2:deleteActiveSheet()[0]不是有效方法,[0]参数不存在且无效...此方法删除活动工作表(默认为sheet[0]在新创建的工作表)。总而言之,我建议您使用下面我的(编辑过的)版本,它更安全且适用于各种情况。 -
好的,但是如果源电子表格有一个名为 sheet1 的工作表,仍然会出现问题。
-
是的,我愿意冒着风险,来源不会有一张名为 Sheet1.... ;-)
标签: google-apps-script google-sheets