如何打开Excel文件,这些文件位于带有谷歌脚本的谷歌驱动器文件夹中?

时间:2019-05-16 04:23:33

标签: excel google-apps-script google-apps

我需要在给定的Google驱动器文件夹中打开Excel文件并读取其数据。为此,我使用了以下代码。

  var folders = DriveApp.getFoldersByName("Test Folder");
  var foldersnext = folders.next();
  var files = foldersnext.getFiles(); // get all files from folder

  while(files.hasNext()) {

    var sheets = SpreadsheetApp.openByUrl(files.next().getUrl());   // Line A     

  }

但是这样会在“ A行”中给出错误;

  

缺少文档1LDVkBTnkcY32ni9WoGDn6xHonPOX87ZV(也许是   删除,或者您没有读取权限?)

但是当使用记录文件ID时,

var selectedFile = files.next();
Logger.log(selectedFile.getId()); 

它给了我预期的结果。因此,我认为错误在于将文件转换为excel文件。请给我一个解决方案,以在给定文件夹中打开多个excel文件并读取其数据...

该项目具有以下范围

1 个答案:

答案 0 :(得分:1)

  • 您要从Google云端硬盘上的Excel文件中检索值。
  • Excel文件放在“测试文件夹”的文件夹中。

如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。

修改点:

  • 为了从Excel文件中检索值,首先,必须将Excel文件转换为Google Spreadsheet。转换后,可以通过Spreadsheet Service检索值。
    • 认为错误的原因是由于电子表格服务试图打开Excel文件。
  • 在此修改后的脚本中,我使用了Drive.Files.copy()从Excel文件转换为Google Spreadsheet。

运行脚本之前:

运行脚本时,请按以下说明在高级Google服务中启用Drive API。此修改后的脚本使用了高级Google服务的Drive API。

  • 在脚本编辑器上
    • 资源->高级Google服务
    • 打开Drive API v2

修改后的脚本:

请按如下所示修改脚本。

从:
while(files.hasNext()) {

  var sheets = SpreadsheetApp.openByUrl(files.next().getUrl());   // Line A     

}
至:
while(files.hasNext()) {
  var file = files.next();
  if (file.getMimeType() == MimeType.MICROSOFT_EXCEL || file.getMimeType() == MimeType.MICROSOFT_EXCEL_LEGACY) {
    var resource = {
      title: file.getName(),
      parents: [{id: foldersnext.getId()}],
      mimeType: MimeType.GOOGLE_SHEETS
    };
    var spreadsheet = Drive.Files.copy(resource, file.getId());
    var sheets = SpreadsheetApp.openById(spreadsheet.id);
  }
}

注意:

  • 如果Excel文件很大,则可能会发生错误。
  • 如果Excel文件数量很大,则可能会发生错误。在这种情况下,请告诉我。
  • 在此示例脚本中,将转换后的电子表格创建到Excel文件的同一文件夹中。如果要在检索值后删除文件,请使用Drive.Files.remove(fileId)

参考文献:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

编辑:

很遗憾,根据您的评论,我无法理解您的问题。我认为这是由于我的英语水平差。我为此表示歉意。但是从您的评论中发现我的理解是正确的。因此,作为测试用例,您可以测试以下流程吗?

  1. 创建新文件夹。
  2. 在创建的文件夹中放置一个Excel文件。
    • 请复制文件夹ID。该文件夹ID在脚本中使用。
  3. 请确认是否在高级Google服务中启用了Drive API。
  4. 运行以下示例脚本。在运行它之前,请设置文件夹ID。

    function sample() {
      var folderId = "###"; // Please set the folder ID.
    
      var folder = DriveApp.getFolderById(folderId);
      var files = folder.getFiles();
      while(files.hasNext()) {
        var file = files.next();
        if (file.getMimeType() == MimeType.MICROSOFT_EXCEL || file.getMimeType() == MimeType.MICROSOFT_EXCEL_LEGACY) {
          var resource = {
            title: file.getName(),
            parents: [{id: folderId}],
            mimeType: MimeType.GOOGLE_SHEETS
          };
          var spreadsheet = Drive.Files.copy(resource, file.getId());
          var sheet = SpreadsheetApp.openById(spreadsheet.id).getSheets()[0];
          var value = sheet.getDataRange().getValues();
          Logger.log(value)
        }
      }
    }
    
  5. 在脚本编辑器中运行sample()的功能。
  6. 脚本完成后,请检查日志。
    • 如果您可以在日志中看到Excel文件的值,则表明该脚本有效。