CONTEXT
在我的云端硬盘中,有以下结构:
Ops文件夹||销售文件夹
Ops包含3个文件夹:Process1 / Process2 / Process3
销售包含3个文件夹:Customer1 / Customer2 / Customer3
:定位
我在驱动器>中询问文件夹的名称SALES
在工作表中,我列出了一些前景的名称。如果潜在客户的名字与我的云端硬盘中的任何文件夹匹配,我会逐个检查。
如果有一个与潜在客户名称匹配的文件夹,则不执行任何操作。
如果没有该Prospect的文件夹,我想在Sales中使用潜在客户名称创建一个新文件夹
function prepararPropuesta() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var ssAS = ss.getActiveSheet()
var ssProspects = ss.getSheetByName('Prospects')
var lr = ssProspects.getLastRow()
var lc = ssProspects.getLastColumn()
// I'm looking for the column 'Prospect' in the Sheet
for(i=2; i<lc; i++){
var columnas = ssProspects.getRange(2, i).getValue()
Logger.log(columnas)
if(columnas == 'Nombre Prospect'){
var colProspect = ssProspects.getRange(2, i).getColumn()
Logger.log(colProspect)
}
}
/*
Now I'm looking for the names of the folders in my Drive
This is looking in all my Drive. It would be nice to filter the
search and look just in SubFolders(Sales)
*/
var folders = DriveApp.searchFolders('"me" in owners');
while (folders.hasNext()) {
var folder = folders.next();
Logger.log(folder.getName());
/* The first Prospect Name is in row 2 and I'm creating a loop to
get each Name
If the name matches an existing Folder then ends the function
If the Prospect Name is not found in the Folders list then creates a new Folder under the name prospectName
*/
for(i=2; i<lr; i++){
var prospectName = ssProspects.getRange(i, colCliente).getValue()
var folderName = folder.getName()
if(folderName = prospectName){
return
}
}
DriveApp.createFolder(prospectName)
}
}
在代码中的行之间,您将逐步找到描述
(1)我找到了潜在客户名称所在的列 - &gt;这很好用
(2)我使用WHILE来获取我的云端硬盘中的所有名称文件夹 这个日志
Logger.log(folder.getName())
返回
[18-04-21 06:33:35:985 PDT] FolderIterator
是否正确获取名称?
(3)我创建了变量folderName和prospectName并将它们循环以检查是否匹配 - &gt;这部分不能正常工作。我想虽然我在developers.google中进行了研究,但我还没有使用正确的方法。怎么可能呢?
日Thnx!
答案 0 :(得分:0)
在循环中使用.getValue()并不是一个好主意,因为在这种情况下,你会为每一行调用电子表格。在一次调用中获取所有值然后在脚本中处理返回的数组被认为是一种很好的做法。
我不确定为什么有必要循环遍历列以找到名称中的列?假设您知道该列是什么,您可以直接获取该列的值(名称)。
这是一个例子,它假设表'B'(改变范围以适应)工作表'Prospects'中的名称。 对于找到的每个名称,调用函数checkIfFolderExistElseCreate()。 该函数检查是否存在具有名称(第二个参数)的文件夹。如果是这样,则不会创建具有该名称的文件夹。
该功能的第一个参数是“父”文件夹,其中将创建新文件夹。
function prepararPropuesta() {
var parent = DriveApp.getFolderById("id_of_parentFolder")
SpreadsheetApp.getActive().getSheetByName('Prospects').getRange('B2:B').getValues()
.forEach(function (r) {
if(r[0]) checkIfFolderExistElseCreate(parent, r[0]);
})
}
function checkIfFolderExistElseCreate(parent, folderName) {
var folder;
try {
folder = parent.getFoldersByName(folderName).next();
} catch (e) {
folder = parent.createFolder(folderName);
}
}
我希望这有帮助吗?