Javascript 复制google drive文件夹中每个工作簿中的所有工作表
我想要一个谷歌脚本,它将循环通过我的谷歌驱动器文件夹中的每个工作簿(电子表格),然后将其中的每个工作表复制到我自己的工作表中。我已经有了一个脚本,但它设置为只复制第一张工作表,我们可以让它循环复制电子表格中的所有工作表吗 我试图改变索引,但它只会拉一张纸Javascript 复制google drive文件夹中每个工作簿中的所有工作表,javascript,google-apps-script,Javascript,Google Apps Script,我想要一个谷歌脚本,它将循环通过我的谷歌驱动器文件夹中的每个工作簿(电子表格),然后将其中的每个工作表复制到我自己的工作表中。我已经有了一个脚本,但它设置为只复制第一张工作表,我们可以让它循环复制电子表格中的所有工作表吗 我试图改变索引,但它只会拉一张纸 function getDataToMaster() { var folder = DriveApp.getFolderById("******************"); //Define id of folder var cont
function getDataToMaster() {
var folder = DriveApp.getFolderById("******************"); //Define id of folder
var contents = folder.getFiles();
var file;
var data;
var sheetMaster = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; //first sheet of the file, change by getSheetByName("NAME") if you want
while(contents.hasNext()){
file = contents.next();
if (file.getMimeType() == "application/vnd.google-apps.spreadsheet") {
var sheet = SpreadsheetApp.openById(file.getId()).getSheets()[0];//first sheet of the file, change by getSheetByName("NAME") if you want
var startRow = 1;
var data = sheet.getDataRange().getValues();
var colToCheck = 7;
for(var j = 0; j < data.length;j++){
if(data[j][colToCheck-1] != "copied"){
sheetMaster.appendRow(data[j]);
sheet.getRange((j+1), colToCheck).setValue("copied");
SpreadsheetApp.flush();
}
}
}
}
}
函数getDataToMaster(){
var folder=DriveApp.getFolderById(“*******************”);//定义文件夹的id
var contents=folder.getFiles();
var文件;
var数据;
var sheetMaster=SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];//如果需要,请按getSheetByName(“名称”)更改文件的第一页
while(contents.hasNext()){
file=contents.next();
if(file.getMimeType()=“application/vnd.google apps.spreadsheet”){
var sheet=SpreadsheetApp.openById(file.getId()).getSheets()[0];//如果需要,请按getSheetByName(“名称”)更改文件的第一页
var startRow=1;
var data=sheet.getDataRange().getValues();
var-colToCheck=7;
对于(var j=0;jif
语句下面添加for
循环,它应该可以正常工作
if (file.getMimeType() == "application/vnd.google-apps.spreadsheet") {
var sheetCount = SpreadsheetApp.openById(file.getId()).getNumSheets();
for(var k = 0; k < sheetCount; k++){
var sheet = SpreadsheetApp.openById(file.getId()).getSheets()[k];//iterates through each sheet in the file
var startRow = 1;
var data = sheet.getDataRange().getValues();
var colToCheck = 7;
for(var j = 0; j < data.length;j++){
if(data[j][colToCheck-1] != "copied"){
sheetMaster.appendRow(data[j]);
sheet.getRange((j+1), colToCheck).setValue("copied");
SpreadsheetApp.flush();
}
}
}
}
if(file.getMimeType()=“application/vnd.google apps.spreadsheet”){
var sheetCount=SpreadsheetApp.openById(file.getId()).getNumSheets();
对于(变量k=0;k
getSheets()[Integer]
的工作原理是,它获取具有提供的匹配索引号的工作表。电子表格中的第一张表是索引0,第二张是1,第三张是2,依此类推。此循环只获取有多少张工作表,并遍历执行您为每个工作表编写的操作的索引。Spreadsheet.getSheets()
返回可以迭代的工作表数组
建议:当您知道将迭代数组中的每个元素时(即,您不想通过中断或返回来终止循环),然后尝试数组.prototype.forEach
,因为它减少了需要设置的变量数量。以下是我将如何使用forEach
两次重写您的getDataToMaster
函数:
函数getDataToMaster(){code>
var folder=DriveApp.getFolderById(“*******************”);
var contents=folder.getFiles();
var sheetMaster=SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
while(contents.hasNext()){
var file=contents.next();
if(file.getMimeType()!==“application/vnd.google apps.spreadsheet”){
继续;
}
SpreadsheetApp.openById(file.getId()).getSheets()
.forEach(功能表){
var-colToCheck=7;
sheet.getDataRange().getValues()
.forEach(函数(行,索引){
如果(行[colToCheck-1]!=“已复制”){
活页纸。世界其他地区(世界其他地区);
sheet.getRange(索引+1,colToCheck).setValue(“复制”);
SpreadsheetApp.flush();
}
});
});
}
}