【问题标题】:How to open excel files, which are located in a google drive folder with google script?如何使用谷歌脚本打开位于谷歌驱动器文件夹中的excel文件?
【发布时间】:2019-05-16 04:23:32
【问题描述】:

我需要在给定的 google drive 文件夹中打开 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 文件并读取其数据...

本项目有以下范围

【问题讨论】:

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


    【解决方案1】:
    • 您想从 Google Drive 上的 Excel 文件中检索值。
    • Excel 文件放在“测试文件夹”的文件夹中。

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

    修改点:

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

    在运行脚本之前:

    当您运行脚本时,请在 Advanced Google Services 中启用 Drive API,如下所示。这个修改后的脚本使用了 Advanced Google Services 的 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 文件的值,则说明脚本有效。

    【讨论】:

    • 感谢您的回答。但是这样它也不会读取任何文件。
    • 当我检查文件的详细信息时,它说他们的类型是Google sheets
    • @dilusha_dasanayaka 感谢您的回复。我带来的不便表示歉意。首先,我想确认一下我对你的问题的理解是否正确。您想从 Google Drive 上的 Excel 文件中检索值。 Excel 文件放在“测试文件夹”的文件夹中。关于他们,我的理解正确吗?关于When I check the details of the file, it says their type is Google sheets,我无法理解你的情况。可以问一下the details of the file的文件吗?
    • @dilusha_dasanayaka 在我修改后的脚本中,如果 Excel 文件位于 Test Folder 的文件夹中,这些 Excel 文件将转换为 Google 电子表格,您可以从转换后的 Google 电子表格中检索值。如果我误解了你的问题,请告诉我。此外,您能否提供复制当前问题的详细流程和脚本?我想从提供的信息中确认该问题。如果可以,请将其添加到您的问题中。
    • @dilusha_dasanayaka 感谢您的测试和支持。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多