好的,所以计划是,当某个单元格包含某个文本时,它会自动将文件移动到太平洋文件夹中。这是我所拥有的,也是我对这种编码语言的新手,所以我同时学习!
这是我到目前为止所记得的,记住这确实有效,但下面的解释更多:
function filemove(root_folder, dest_folderinactive, dest_folderactive) {
var root_folder = DriveApp.getFolderById('0B_Nz0cop3s-ITTlYM21SNGIwNDg');
var dest_folderinactive = DriveApp.getFolderById('0B_Nz0cop3s-IQVZEWUNiQ1d2TzQ');
var dest_folderactive = DriveApp.getFolderById('0B_Nz0cop3s-IalFITGhzN3lTTzg');
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var file = DriveApp.getFileById(spreadsheet.getId());
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "StatsData" ) {
var range = s.getRange("E16")
var values = range.getValues();
for(var i in values){
if(values[i][0].match("Not Police")!=null){
dest_folderinactive.addFile(file);
root_folder.removeFile(file);
}
if(values[i][0].match("Police")!=null){
dest_folderactive.addFile(file);
root_folder.removeFile(file);
}
}
}
};
好的,这样做的话就是细胞" E16"包含"不是警察"它会将文件移动到名为" Inactive"的文件夹中。 (dest_folderinactive)并且如果该单元格包含"警察"它将再次移动到(dest_folderactive)这些都来自所谓的" root"文件夹 - 我知道root意味着google驱动器的第一页,但在这种情况下,包含这些文件的基本文件夹被命名为root。这段代码有效(有时候)有时候你必须多次运行它才能正常工作而且效率不高。
当我希望它能够执行此操作时,我的问题也会出现,当文件位于In-Active文件夹中并且单元格更改为" Police"我希望它从In-Active转为Active,同样适用于Active#34;非警察"去活动,但我似乎无法让这个工作。如果有人可以提供帮助,那将会非常有帮助,同时也知道这些代码是有点单,因为它不会第一次这样做。
答案 0 :(得分:0)
试试这段代码。它会根据目标单元格的值将文件移动到所需的文件夹。如果目标单元格中存在垃圾数据,它还会将文件返回到指定的“根”文件夹。您需要在代码顶部设置特定的文件夹ID:如果您需要将其传入,则需要在e
之后将它们添加为参数。参数e
需要使用onEdit
触发事件数据(此函数不使用,但如果传入文件夹ID则需要考虑)。
function filemove(e){
// folder IDs
var root_folder = 'root_folder_id_string';
var dest_folderinactive = 'inactive_files_folder_id_string';
var dest_folderactive = 'active_files_folder_id_string';
// the specific destination folder on this run
var dest_folder;
// assume the file will move
var move_file = true;
// the spreadsheet & its parent folders
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var file = DriveApp.getFileById(spreadsheet.getId());
var parents = file.getParents();
var sheet = spreadsheet.setActiveSheet(spreadsheet.getSheetByName("StatsData"));
// now grab the value of E16 & look for the string "police"
// string.search(regEx) returns the position of the first match, otherwise -1
var values = sheet.getRange("E16").getValues();
switch(values[0][0].search(/police/i)){
case -1:
dest_folder = root_folder;
break;
case 0:
dest_folder = dest_folderactive;
break;
default:
dest_folder = dest_folderinactive;
}
// is the dest_folder in the parents array?
while(parents.hasNext()){
var fldr = parents.next().getId();
if(fldr == dest_folder){
// YES -- don't move the file
move_file = false;
} else{
// NO -- are the other folders in the parents array?
if(fldr == root_folder || fldr == dest_folderinactive || fldr == dest_folderactive){
// YES -- remove the file from that folder
DriveApp.getFolderById(fldr).removeFile(file);
}
}
}
// do we have to move the file?
if(move_file){
DriveApp.getFolderById(dest_folder).addFile(file);
}
}
我正在踩着父母阵列&将它们与目标文件夹进行比较,以便您不会错误地从其他文件夹中删除该文件。
如果目标细胞具有更多的自由形态数据&你正在寻找字符串“警察”或“不警察”,然后switch()
将无法正常工作。在这种情况下,您需要使用if(...){...} else if(...){...} else{...}
进行测试。