Google脚本 - 当单元格包含特定文本

时间:2017-05-30 20:24:27

标签: google-apps-script

好的,所以计划是,当某个单元格包含某个文本时,它会自动将文件移动到太平洋文件夹中。这是我所拥有的,也是我对这种编码语言的新手,所以我同时学习!

这是我到目前为止所记得的,记住这确实有效,但下面的解释更多:

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;非警察"去活动,但我似乎无法让这个工作。如果有人可以提供帮助,那将会非常有帮助,同时也知道这些代码是有点单,因为它不会第一次这样做。

1 个答案:

答案 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{...}进行测试。