【发布时间】:2019-08-24 14:57:32
【问题描述】:
我正在编写一个函数来遍历 Google Drive 上的文件夹并将文件(Google 表格)与变量字符串(在表格单元格上指定的日期)匹配。当找到匹配的文件时,包含的文件夹名称字符串将分配给 folderItems[0],并将文件 URL 分配给 folderItems[1]。找到文件夹中的所有匹配文件后,以相同的方式迭代下一个文件夹。这些“folderItems”数组存储在父数组“folderItemsContainer”中,以创建一个二维数组,然后可以使用 .setValues() 将其输出到电子表格。
我无法弄清楚如何或在何处放置增量变量,以便它仅在文件名匹配时递增,但在未找到匹配时不会停止循环。
我尝试了各种结构,包括互换 for 和 while 循环以及在看似有用的地方插入 if 语句。我在 Stackoverflow 上查看了一些不同的答案,这些答案几乎是有意义的,但似乎都不适用于这里。我对编程相当陌生。我已经尝试过不同的代码变体,但这是我目前为止的目标:
function GetFolderData() {
var currentSheet = SpreadsheetApp.getActiveSpreadsheet();
var currentYearPeriod = currentSheet.getRange("C1!A4").getValue();
// Logger.log(currentYearPeriod);
//Get folder objects from parent folder
var parentFolderId = "17F0fcBH0jmxsk2sUq723AuIY0E2G_u0m";
var parentFolder = DriveApp.getFolderById(parentFolderId);
//Get folders from specified parent folder
var StaffFolders = parentFolder.getFolders();
//Create container array
var folderItemsContainer = [];
//Create Item Array
var folderItems = [];
var i = 0;
//For every staff folder, regardless of content, do:
while (StaffFolders.hasNext()) {
//Get current folder object
currentFolder = StaffFolders.next();
//Get files in current folder object as FileIterator
FolderFiles = currentFolder.getFiles();
//If folder empty, outer while loop will iterate
if (FolderFiles !== null) {
//Iterate through existing files
while (FolderFiles.hasNext()) {
//Get file object sequentially
file = FolderFiles.next();
//When filename matches currentYearPeriod, store URL next to name in folderItems
for (i = 0; file.getName().indexOf(currentYearPeriod) !== -1; i++) {
folderItems[i] = [];
folderItems[i][0] = currentFolder.getName();
// Logger.log(currentFolder.getName());
folderItems[i][1] = file.getUrl();
folderItemsContainer[i] = folderItems[i];
}
}
}
}
return folderItemsContainer;
}
function InsertFolderData() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("B4:Z1000").clearContent();
FolderData = GetFolderData();
Logger.log(FolderData);
sheet
.getRange(4, 2, FolderData.length, FolderData[0].length)
.setValues(FolderData);
Logger.log(FolderData);
/* var str = "";
for (var i = 0; i < FolderData.length; i++) {
str += FolderData[i] + "\r\n";
}
str = str.substr(0);
var ui = SpreadsheetApp.getUi();
ui.alert("DATA IMPORTED: " + "\r\n" + str);
*/
}
使用上面的代码,我不完全确定为什么,但我似乎陷入了无限循环并且脚本没有完成。我希望实现的是 folderItemsContainer 数组填充了包含与 currentYearPeriod 变量匹配的文件的文件信息(父文件夹名称 [0] 和文件 URL [1])的数组。我一直在重构代码,学到了很多东西,但不幸的是没有解决问题。
【问题讨论】:
标签: javascript arrays google-apps-script