遍历文件夹和 sub-folders/files 并将传播sheet 数据复制到存档 sheet
Iterate through folders and sub-folders/files and copy spreadsheet data to archive sheet
我有一个遍历文件夹的脚本,打开所有传播sheet,并将这些sheet中的某个array/range复制到存档sheet .我的脚本 [在包含文件的文件夹上] 运行良好,但我无法弄清楚如何让我的脚本也遍历子文件夹。
我知道我最终会遇到超时问题。但是我将考虑设置一个令牌,让它在我可以让它遍历整个文件夹结构时从它停止的地方继续。 (所以现在不是问题。)
我的文件夹结构示例如下:
- 主文件夹
- ---教师姓名(文件夹)
- -----阅读评估资料(文件夹)
- --------传播sheet
- --------传播sheet
- --------传播sheet
- -----数学评估资料(文件夹)
- --------传播sheet
- --------传播sheet
- --------传播sheet
- ---教师姓名(文件夹)
- -----继续...
如果你们能给我任何帮助,我将不胜感激!
谢谢,
布兰登
function runDataReport () {
var folder = DriveApp.getFolderById("ID");
Logger.log('folder: ' + folder);
var sheetFiles = folder.getFilesByType("application/vnd.google-apps.spreadsheet");
Logger.log("sheetFiles.hasNext(): " + sheetFiles.hasNext());
var data;
while (sheetFiles.hasNext()) {
var file = sheetFiles.next();
var theFileType = file.getMimeType();
Logger.log("theFileType: " + theFileType);
var ssID = file.getId();
Logger.log('ssID: ' + ssID);
var thisSS = SpreadsheetApp.openById(ssID),
ssName = thisSS.getName(),
ssUrl = thisSS.getUrl(),
classData = thisSS.getSheets()[0],
dataLastRow = classData.getLastRow(),
Avals = classData.getRange("A1:A").getValues(),
Alast = Avals.filter(String).length,
Jvals = classData.getRange("J2:J").getValues(),
Jlast = Jvals.filter(String).length,
classDataRange = classData.getRange(3, 1, Alast-2, 50),
dataArray = classDataRange.getValues();
var dataReportSS = SpreadsheetApp.openById('ID'), //Data Report Sheet ID
dataReportSheet = dataReportSS.getSheets()[0],
dataReportNewRow = dataReportSheet.getLastRow() + 1,
newDataRange = dataReportSheet.getRange(dataReportNewRow, 3, Alast-2, 50);
if (Jlast > 1){
newDataRange.setValues(dataArray);
for (var i=0, x = dataArray.length; i<x; i++){
dataReportSheet.getRange(dataReportNewRow + i, 1).setValue(ssName);
}
for (var i=0, x = dataArray.length; i<x; i++){
dataReportSheet.getRange(dataReportNewRow + i, 2).setValue(ssUrl);
}
}
}
}
这是一些代码,希望对您有用。我没有测试它,所以如果有任何问题,请告诉我。
function runDataReport () {
var allFoldersInThisDrive = DriveApp.getFolders();
var foldersToExclude = ["folder1","folder2","folder3"];
while (allFoldersInThisDrive.hasNext()) {
var folder = allFoldersInThisDrive.next();
//Logger.log(allFoldersInThisDrive.getName());
var thisFolderName = folder.getName();
//If index is -1, then thisFolderName was not found in the folders to exclude
if (foldersToExclude.indexOf(thisFolderName)===-1) {
//branch to another function in order to interate through all the files in this folder
processAllFiles(folder)
};
};
}
function processAllFiles(argFolder) {
var sheetFiles = argFolder.getFilesByType("application/vnd.google-apps.spreadsheet");
Logger.log("sheetFiles.hasNext(): " + sheetFiles.hasNext());
var data;
while (sheetFiles.hasNext()) {
var file = sheetFiles.next();
var theFileType = file.getMimeType();
Logger.log("theFileType: " + theFileType);
var ssID = file.getId();
Logger.log('ssID: ' + ssID);
var thisSS = SpreadsheetApp.openById(ssID),
ssName = thisSS.getName(),
ssUrl = thisSS.getUrl(),
classData = thisSS.getSheets()[0],
dataLastRow = classData.getLastRow(),
Avals = classData.getRange("A1:A").getValues(),
Alast = Avals.filter(String).length,
Jvals = classData.getRange("J2:J").getValues(),
Jlast = Jvals.filter(String).length,
classDataRange = classData.getRange(3, 1, Alast-2, 50),
dataArray = classDataRange.getValues();
var dataReportSS = SpreadsheetApp.openById('The ID here'), //Data Report Sheet ID
dataReportSheet = dataReportSS.getSheets()[0],
dataReportNewRow = dataReportSheet.getLastRow() + 1,
newDataRange = dataReportSheet.getRange(dataReportNewRow, 3, Alast-2, 50);
if (Jlast > 1){
newDataRange.setValues(dataArray);
for (var i=0, x = dataArray.length; i<x; i++){
dataReportSheet.getRange(dataReportNewRow + i, 1).setValue(ssName);
}
for (var i=0, x = dataArray.length; i<x; i++){
dataReportSheet.getRange(dataReportNewRow + i, 2).setValue(ssUrl);
}
}
}
};
我有一个遍历文件夹的脚本,打开所有传播sheet,并将这些sheet中的某个array/range复制到存档sheet .我的脚本 [在包含文件的文件夹上] 运行良好,但我无法弄清楚如何让我的脚本也遍历子文件夹。
我知道我最终会遇到超时问题。但是我将考虑设置一个令牌,让它在我可以让它遍历整个文件夹结构时从它停止的地方继续。 (所以现在不是问题。)
我的文件夹结构示例如下:
- 主文件夹
- ---教师姓名(文件夹)
- -----阅读评估资料(文件夹)
- --------传播sheet
- --------传播sheet
- --------传播sheet
- -----数学评估资料(文件夹)
- --------传播sheet
- --------传播sheet
- --------传播sheet
- ---教师姓名(文件夹)
- -----继续...
如果你们能给我任何帮助,我将不胜感激! 谢谢, 布兰登
function runDataReport () {
var folder = DriveApp.getFolderById("ID");
Logger.log('folder: ' + folder);
var sheetFiles = folder.getFilesByType("application/vnd.google-apps.spreadsheet");
Logger.log("sheetFiles.hasNext(): " + sheetFiles.hasNext());
var data;
while (sheetFiles.hasNext()) {
var file = sheetFiles.next();
var theFileType = file.getMimeType();
Logger.log("theFileType: " + theFileType);
var ssID = file.getId();
Logger.log('ssID: ' + ssID);
var thisSS = SpreadsheetApp.openById(ssID),
ssName = thisSS.getName(),
ssUrl = thisSS.getUrl(),
classData = thisSS.getSheets()[0],
dataLastRow = classData.getLastRow(),
Avals = classData.getRange("A1:A").getValues(),
Alast = Avals.filter(String).length,
Jvals = classData.getRange("J2:J").getValues(),
Jlast = Jvals.filter(String).length,
classDataRange = classData.getRange(3, 1, Alast-2, 50),
dataArray = classDataRange.getValues();
var dataReportSS = SpreadsheetApp.openById('ID'), //Data Report Sheet ID
dataReportSheet = dataReportSS.getSheets()[0],
dataReportNewRow = dataReportSheet.getLastRow() + 1,
newDataRange = dataReportSheet.getRange(dataReportNewRow, 3, Alast-2, 50);
if (Jlast > 1){
newDataRange.setValues(dataArray);
for (var i=0, x = dataArray.length; i<x; i++){
dataReportSheet.getRange(dataReportNewRow + i, 1).setValue(ssName);
}
for (var i=0, x = dataArray.length; i<x; i++){
dataReportSheet.getRange(dataReportNewRow + i, 2).setValue(ssUrl);
}
}
}
}
这是一些代码,希望对您有用。我没有测试它,所以如果有任何问题,请告诉我。
function runDataReport () {
var allFoldersInThisDrive = DriveApp.getFolders();
var foldersToExclude = ["folder1","folder2","folder3"];
while (allFoldersInThisDrive.hasNext()) {
var folder = allFoldersInThisDrive.next();
//Logger.log(allFoldersInThisDrive.getName());
var thisFolderName = folder.getName();
//If index is -1, then thisFolderName was not found in the folders to exclude
if (foldersToExclude.indexOf(thisFolderName)===-1) {
//branch to another function in order to interate through all the files in this folder
processAllFiles(folder)
};
};
}
function processAllFiles(argFolder) {
var sheetFiles = argFolder.getFilesByType("application/vnd.google-apps.spreadsheet");
Logger.log("sheetFiles.hasNext(): " + sheetFiles.hasNext());
var data;
while (sheetFiles.hasNext()) {
var file = sheetFiles.next();
var theFileType = file.getMimeType();
Logger.log("theFileType: " + theFileType);
var ssID = file.getId();
Logger.log('ssID: ' + ssID);
var thisSS = SpreadsheetApp.openById(ssID),
ssName = thisSS.getName(),
ssUrl = thisSS.getUrl(),
classData = thisSS.getSheets()[0],
dataLastRow = classData.getLastRow(),
Avals = classData.getRange("A1:A").getValues(),
Alast = Avals.filter(String).length,
Jvals = classData.getRange("J2:J").getValues(),
Jlast = Jvals.filter(String).length,
classDataRange = classData.getRange(3, 1, Alast-2, 50),
dataArray = classDataRange.getValues();
var dataReportSS = SpreadsheetApp.openById('The ID here'), //Data Report Sheet ID
dataReportSheet = dataReportSS.getSheets()[0],
dataReportNewRow = dataReportSheet.getLastRow() + 1,
newDataRange = dataReportSheet.getRange(dataReportNewRow, 3, Alast-2, 50);
if (Jlast > 1){
newDataRange.setValues(dataArray);
for (var i=0, x = dataArray.length; i<x; i++){
dataReportSheet.getRange(dataReportNewRow + i, 1).setValue(ssName);
}
for (var i=0, x = dataArray.length; i<x; i++){
dataReportSheet.getRange(dataReportNewRow + i, 2).setValue(ssUrl);
}
}
}
};