如果文件中包含西里尔文字符,则无法按名称获取文件

时间:2017-08-09 13:51:54

标签: google-apps-script google-sheets

所以问题是:

方法 getFilesByName()如果我使用西里尔文件定位文件,则不返回任何内容。但是如果我使用 getName(),我可以看到此文件。

问题出在哪里?

已添加:

抱歉没有消息。正如第二条评论所说 - 如果文件名是大写字母,问题仍然存在。

因此,如果我尝试搜索目标文件夹中的文件列表,googlescript将会看到我的文件,并返回“Шаблонпоописанию”。

function checkFile2(){
  var foldername = "CaseMe";
  var filename = FILE_NAME;

  var folder = DriveApp.getFoldersByName(foldername);

  Logger.log(folder.hasNext());

  //Folder does not exist
  if(!folder.hasNext()){

  Logger.log("No Folder Found");

  }
  //Folder does exist
  else{
    Logger.log("Folder Found")
    var file   = folder.next().getFiles;
    if(!file.hasNext()){
       Logger.log("No Files Found");
    }
    else{
      while (file.hasNext()) {
      var filel = file.next();
      Logger.log(filel.getName());

    }
  }

}

但是,如果我将尝试按目标名称搜索

function checkFile2(){
  var foldername = "CaseMe";
  var filename = FILE_NAME; // return "Шаблон по описанию"

  var folder = DriveApp.getFoldersByName(foldername);

  Logger.log(folder.hasNext());

  //Folder does not exist
  if(!folder.hasNext()){

  Logger.log("No Folder Found");

  }
  //Folder does exist
  else{
    Logger.log("Folder Found")
    var file   = folder.next().getFilesByName(filename + '.xml');
    if(!file.hasNext()){
       Logger.log("No File Found");
    }
    else{
      Logger.log("Files Found"); 
    }
  }
}

Googlescritp找不到我的文件,将返回“No File Found”

2 个答案:

答案 0 :(得分:1)

它确实有效,我认为你不太了解.getFilesByName()方法。

documentation表示此方法返回用户驱动器中具有给定名称的所有文件的集合。即它返回一个对象,如下面的屏幕截图所示,然后必须使用.hasNext().next()方法迭代对象。

下面的截图应该会让它更清晰一些。我创建了3个同名的测试文件(复制了维基百科中的字符)。 enter image description here

答案 1 :(得分:0)

如果文件名包含大写字母,则此问题仍然存在。

function startFindFile() {

      var folder =  DriveApp.getFolderById(DriveApp.getFoldersByName("prices").next().getId()); 
      var fileNameCyr1 = "Прайс1_Склад ЦС.xls";
      var fileNameCyr2 = "прайс1_склад цс.xls";
      var fileNameEng = "Price.txt";

      Logger.log("List all files:" );
      var files = folder.getFiles();
      findFile(files);

      Logger.log("Find files: " + fileNameEng ); 
      files = folder.getFilesByName(fileNameEng);
      findFile(files);

      Logger.log("Find files: " + fileNameCyr1 ); 
      files = folder.getFilesByName(fileNameCyr1);
      findFile(files);

      Logger.log("Find files: " + fileNameCyr2 );
      files = folder.getFilesByName(fileNameCyr2);
      findFile(files);
    }

    function findFile(files) {

       while (files.hasNext()) {
        var file = files.next();
        Logger.log(file.getName() + " " + file.getId());

       }

    }

Result from Logger