【问题标题】:Is there any way I can convert CSV files w/o avoid converting already converted files有什么方法可以转换 CSV 文件而不避免转换已转换的文件
【发布时间】:2020-06-25 04:41:00
【问题描述】:

您好,我是一般 google 脚本的新手,我一直在调整我从 Bulk convert csv files in Google drive to Google Sheets 找到的这个脚本:

function convert() {
      var folder = DriveApp.getFolderById('folder id here');
      var files = folder.getFiles();
      while (files.hasNext()) {
        var file = files.next();
        Drive.Files.copy({}, file.getId(), {convert: true});
      }
    } 

它就像一个魅力。问题是这段代码不加选择地转换了上述文件夹中的每个文件,包括转换后的文件和源文件。因此,如果我第二次运行脚本,我最终会得到转换文件的新副本和源文件的另一个副本。

有没有办法解决这个问题?我正在考虑将转换后的文件移动到不同的文件夹并允许文件覆盖以避免复制。

非常感谢您。

【问题讨论】:

    标签: google-apps-script google-sheets google-drive-api google-docs


    【解决方案1】:

    这个修改怎么样?

    在此修改中,我想提出以下解决方法。

    解决方法:

    在这个解决方法中,源文件的 mimeType 被检查,并且描述被给出了复制的源文件。描述用作检查文件是否已被复制。这样,当脚本第一次运行时,CSV 源文件将转换为 Google 电子表格。那时,描述将作为copied 添加到源文件中。并且,在第 2 次运行中,mimeType 为 CSV 且描述没有 copied 值的文件被复制和转换。通过此流程,已复制的文件在第 2 次运行后不再使用。

    当上述解决方法反映到您的脚本时,它变成如下。

    示例脚本:

    function convert() {
      var folder = DriveApp.getFolderById('folder id here');
      var files = folder.getFiles();
      while (files.hasNext()) {
        var file = files.next();
        if (file.getMimeType() == MimeType.CSV && file.getDescription() != "copied") {  // Added
          file.setDescription("copied");  // Added
          Drive.Files.copy({}, file.getId(), {convert: true});
        }
      }
    }
    

    注意:

    • 当你已经使用了文件的描述,你也可以使用文件的属性。

    • 如果您想在每次运行时复制源 CSV 文件,您还可以使用以下修改后的脚本。在这种情况下,只检查 mimeType。

        function convert() {
          var folder = DriveApp.getFolderById('folder id here');
          var files = folder.getFiles();
          while (files.hasNext()) {
            var file = files.next();
            if (file.getMimeType() == MimeType.CSV) {  // Added
              Drive.Files.copy({}, file.getId(), {convert: true});
            }
          }
        } 
      

    参考资料:

    【讨论】:

    • 我认为这个唯一的问题是我无法第二次运行该脚本。但这应该没问题,因为这通常只需要一个一次性的过程!我只需要小心不要删除 gsheet 文件。再次感谢您!
    • @gmann 感谢您的回复。我很高兴你的问题得到了解决。作为附加信息,例如在复制 CSV 文件时,当您要将转换后的 Google 电子表格放入特定文件夹时,请将Drive.Files.copy({}, file.getId(), {convert: true}); 修改为Drive.Files.copy({parents: [{id: "###folderId###"}]}, file.getId(), {convert: true});。这样,Google 电子表格就会被放到特定文件夹中。
    • 太棒了,我也会尝试实现这一点,谢谢!
    猜你喜欢
    • 2022-08-17
    • 2022-11-14
    • 2020-11-01
    • 1970-01-01
    • 2021-01-03
    • 2020-04-20
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多