如何使用 google 脚本打开位于 google 驱动器文件夹中的 excel 文件?

How to open excel files, which are located in a google drive folder with google script?

我需要打开给定 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     

  }

但是它在 "Line A" 中给出了这样的错误;

Document 1LDVkBTnkcY32ni9WoGDn6xHonPOX87ZV is missing (perhaps it was deleted, or you don't have read access?)

但是当使用 Log 文件的 ID 时,

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

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

这个项目有以下范围

  • 您想从 Google 驱动器上的 Excel 文件中检索值。
  • Excel 个文件放在 "Test Folder".
  • 个文件夹中

如果我的理解是正确的,这个修改怎么样?

修改点:

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

在 运行 脚本之前:

当您运行脚本时,请在高级Google服务中启用驱动器API,如下所示。此修改后的脚本使用高级 Google 服务的驱动器 API。

  • 在脚本编辑器上
    • 资源 -> 高级 Google 服务
    • 打开驱动器 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. 请确认驱动器 API 是否在高级 Google 服务中启用。
  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 文件的值,则表明该脚本有效。