有什么方法可以转换 CSV 文件 w/o 避免转换已经转换的文件

Is there any way I can convert CSV files w/o avoid converting already converted files

您好,我是 google 脚本的绝对新手,我一直在调整我从 :

找到的这个脚本
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});
      }
    } 

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

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

在此先感谢您。

这个修改怎么样?

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

解决方法:

在此解决方法中,检查了源文件的 mimeType,并且还为复制的源文件提供了描述。该描述用作文件是否已被复制的检查器。这样,当脚本第一次为 运行 时,CSV 源文件将转换为 Google 电子表格。那时,描述被添加到源文件中作为 copied。并且,在第二个运行中,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});
          }
        }
      } 
    

参考文献: