有什么方法可以转换CSV文件而无需转换已转换的文件

时间:2020-06-25 04:41:00

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

您好,我是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});
      }
    } 

,它就像一种魅力。问题在于此代码会随意转换所述文件夹中的每个文件,包括转换后的文件和源文件。因此,如果我运行第二个脚本,最终将获得转换后文件的新副本和源文件的另一副本。

有什么办法可以解决此问题?我在考虑将转换后的文件移到另一个文件夹并允许文件覆盖以避免复制的思路。

非常感谢您。

1 个答案:

答案 0 :(得分:1)

该修改如何?

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

解决方法:

在此替代方法中,将检查源文件的mimeType,并且还将给出复制的源文件的描述。该描述用作检查文件是否已被复制的检查器。这样,当脚本第一次运行时,CSV源文件将转换为Google Spreadsheet。那时,描述以copied的形式添加到源文件中。并且,在第二次运行中,复制并转换了mimeType为CSV且描述不为copied的文件。通过此流程,第二次运行后将不使用已复制的文件。

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

示例脚本:

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});
          }
        }
      } 
    

参考文献: