首页 > 解决方案 > 自动 .XLS 到 Google 表格转换器不起作用

问题描述

因此,我一直在使用脚本自动将文件夹中的所有 .xls 文件复制并转换为 Google 表格文件类型,并将它们存放在不同的文件夹中。不幸的是,它正在复制已复制的同一文件的副本,即使在脚本中指定不这样做(第 10 行)。我可能在这里遗漏了一些东西,但并没有真正改变,似乎只是自发地不遵循脚本中的 IF 条件。请看下面:

    function XLSConvert() {

    var files = DriveApp.searchFiles("title contains '.xls' and parents in 'File_ID:A' and trashed = false");
    var destinationFolderId = "File_ID:B";
    var existingFileNames = getFilesInFolder(destinationFolderId);
    while (files.hasNext()) {
        var xFile = files.next();
        var name = xFile.getName();
        try {
            if (!existingFileNames[name] && (name.indexOf('.xls') > -1)) {
                var ID = xFile.getId();
                var xBlob = xFile.getBlob();
                var newFile = {
                    title: name,
                    key: ID,
                    'parents': [{
                        "id": destinationFolderId
                    }]
                }
                file = Drive.Files.insert(newFile, xBlob, {
                    convert: true
                });
            }
          
        } catch (error) {
            console.error("Error with file " + name + ": " + error);
        }
    }

    function getFilesInFolder(folderId) {
        var folderId = "File_ID:B";
        var folder = DriveApp.getFolderById(folderId);
        var filesIterator = folder.getFiles();
        var files = {};
        while (filesIterator.hasNext()) {
            var file = filesIterator.next();
            files[file.getName()] = true;
        }
        return files;
}
    }

任何帮助将不胜感激解决这个问题。谢谢 :)

标签: google-apps-scriptgoogle-sheets

解决方案


修改点:

  • 为了检索特定文件夹中的文件列表,请修改parents in 'File_ID:A''File_ID:A' in parents进行搜索查询。
  • 在您的脚本中,当 XLSX 文件转换为 Google 电子表格时,扩展名似乎已被删除。这是需要考虑的。

当以上几点反映到您的脚本时,它变成如下。

修改后的脚本:

function XLSConvert() {
  var files = DriveApp.searchFiles("title contains '.xls' and 'File_ID:A' in parents and trashed = false");  // Modified
  var destinationFolderId = "File_ID:B";
  var existingFileNames = getFilesInFolder(destinationFolderId);
  while (files.hasNext()) {
    var xFile = files.next();
    var name = xFile.getName().split(".");  // Modified
    name.pop();  // Added
    try {
      if (!existingFileNames[name]) {  // or if (!existingFileNames[name] && xFile.getMimeType() != MimeType.GOOGLE_SHEETS) {
        var ID = xFile.getId();
        var xBlob = xFile.getBlob();
        var newFile = {title: name,key: ID,'parents': [{"id": destinationFolderId}]};
        file = Drive.Files.insert(newFile, xBlob, {convert: true});
      }
    } catch (error) {
      console.error("Error with file " + name + ": " + error);
    }
  }
  
  function getFilesInFolder(folderId) {
    var folderId = "File_ID:B";
    var folder = DriveApp.getFolderById(folderId);
    var filesIterator = folder.getFiles();
    var files = {};
    while (filesIterator.hasNext()) {
      var file = filesIterator.next();
      files[file.getName()] = true;
    }
    return files;
  }
}

参考:


推荐阅读