在对象函数getContinuationToken()中找不到函数getName

时间:2015-06-15 16:44:13

标签: google-apps-script

我继承了Google文档共享网站的一些代码。 Google落后于docslist类,我转换为driveapp。以下函数检查是否添加了任何文件。我对代码有基本的了解,不明白导致错误的原因。

以下功能不起作用。在对象函数getContinuationToken()

中找不到函数getName

这是功能:

function checkDocs(){

  try {
var pageFolder = DriveApp.getFolderById('0B3e2-xxxxxxxxxxxxxxxxx');
var filesAdded = new Array();
var counter = 0;
var pageFiles = pageFolder.getFiles();
var blank = new Array(); //extra for function
var type = "FILE";

  // Logger.log(pageFiles)

for (var i = 0; i < pageFiles.length; i++) {
  if (!inProperties(pageFiles[i].getName(), pageFiles[i].getFileType().toString(), type)) {
    filesAdded[counter] = pageFiles[i];
    counter++;
  }
}

if (filesAdded.length > 0) {  
  thereAreUpdates = true;
  docWasAdded = true;
  additioned(filesAdded, blank, type);
}

deletedDocs = checkDeleted(pageFiles);
if (deletedDocs.length > 0) {
 thereAreUpdates = true;
 docWasRemoved = true;
   }

  } catch (e) {
  MailApp.sendEmail("xxxx@xxxxx.com", "Doc Share Error - Doc", e.message);
  }
}

函数inProperties就是这个

//checking to see if the file or link is in the database
function inProperties(first,second,type) { //file: name,type ... link: name,link

  var keys = PropertiesService.getScriptProperties().getKeys(); 
  var exists = false;

  if (keys.length > 0) {
if (type == "FILE") {
  for (i in keys) {
    if (keys[i] == (second + " - " + first)) {
      exists = true;
    }
  }
}
if (type == "LINK") {
  for (i in keys) {
    if (keys[i] == ("link - " + second)) {
      exists = true;
    }
  }
}
  }

  if (exists) {
return true;
  } else {
  addition(first,second,type);
  return false;
  }
}

非常感谢我更改了代码,现在它变得更远,但仍然有错误。

调试时,它会到达filesAdded行,然后右键捕获。调试器显示filesAdded [] counter = 0.0,我没有看到i的值。 thisFileName,thisFileType和Type。

有正确的值
if (!inProperties(thisFileName, thisFileType, type)) {
  filesAdded[counter] = pageFiles[i];
  counter++;

1 个答案:

答案 0 :(得分:1)

您需要将hasNext()方法与从getFiles()返回的FileIterator一起使用。

此示例代码直接来自文档:

// Log the name of every file in the user's Drive.
var files = DriveApp.getFiles();
while (files.hasNext()) {
  var file = files.next();
  Logger.log(file.getName());
}

您不需要使用while循环,例如,您只需要一个文件。但在你的情况下,看起来你得到的是多个文件。

所以,我把你的代码改为:

try {
  var pageFolder = DriveApp.getFolderById('folderID HERE');
  var filesAdded = new Array();
  var counter = 0;
  var pageFiles = pageFolder.getFiles();
  var blank = new Array(); //extra for function
  var type = "FILE";

  // Logger.log(pageFiles)
  var thisFileType = "";
  var thisFileName = "";

   while (pageFiles.hasNext()) {
     var file = pageFiles.next();
     Logger.log(file.getName());
     thisFileName = file.getName();
     thisFileType = file.getMimeType();

    if (!inProperties(thisFileName, thisFileType, type)) {
      filesAdded[counter] = pageFiles[i];
      counter++;
    }
  }

文件类没有getFileType()方法,您需要使用getMimeType()