如何使用谷歌脚本打开位于谷歌驱动器文件夹中的Excel文件?

2024-03-27

我需要打开给定的谷歌驱动器文件夹中的 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文件并读取其数据...

该项目有以下范围

  • https://www.googleapis.com/auth/drive.readonly https://www.googleapis.com/auth/drive.readonly
  • https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/spreadsheets

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

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

修改点:

  • In order to retrieve values from Excel file, at first, the Excel file is required to be converted to Google Spreadsheet. After converted it, the values can be retrieved by Spreadsheet Service.
    • 认为错误的原因是由于电子表格服务尝试打开Excel文件。
  • 在这个修改后的脚本中,我使用了Drive.Files.copy()用于从 Excel 文件转换为 Google 电子表格。

运行脚本之前:

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

  • On script editor
    • 资源 -> 高级 Google 服务
    • 启用云端硬盘 API v2

修改后的脚本:

请按如下方式修改您的脚本。

From:
while(files.hasNext()) {

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

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

Note:

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

参考:

  • 文件:复制 https://developers.google.com/drive/api/v2/reference/files/copy
  • 文件:删除 https://developers.google.com/drive/api/v2/reference/files/delete
  • 电子表格服务 https://developers.google.com/apps-script/reference/spreadsheet/

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

Edit:

从你的评论中,发现我的理解是正确的。那么作为一个测试用例,你能测试一下下面的流程吗?

  1. 创建新文件夹。
  2. Put an Excel file in the created folder.
    • 请复制文件夹 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. After the script is finished, please check the log.
    • 如果您可以在日志中看到Excel文件的值,则发现该脚本有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用谷歌脚本打开位于谷歌驱动器文件夹中的Excel文件? 的相关文章

  • Google Apps 脚本:从云端硬盘下载文件(同一用户)

    我正在尝试编写一个 Google Apps 脚本来下载特定云端硬盘文件夹中的所有文件 可能是 csv 文件 我找到了 getDownloadUrl 方法 但我不知道该做什么do用它 我目前正在尝试以下代码 其中files是文件夹中的文件列表
  • 如何填充上次保存的用户和文件的上次保存日期

    我有下面的代码从文件夹中获取文件名 Sub GetFileNames Assessed As T2 Dim sPath As String sFile As String Dim iRow As Long iCol As Long Dim
  • 在 EXCEL 中使用多个表的条件求和

    我有一个表 我试图根据两个参考表的值来填充该表 我有各种不同的项目 类型 1 类型 2 等 每个项目运行 4 个月 并且根据其生命周期的不同时间 花费不同的金额 这些成本计算显示在Ref Table 1 参考表1 Month a b c d
  • 如何删除Excel 2010单元格中的某些字符

    在 A 列中 我有很多类似这样的名称 约翰 史密斯 我仍然希望它们在 A 中 但 被删除了 If John Smith 位于单元格 A1 中 然后使用以下公式执行您想要的操作 SUBSTITUTE SUBSTITUTE A1 内部 SUBS
  • 任务执行期间在任务窗格上滚动时工作表冻结

    我们正在使用office js API 开发一个office Addin 反复出现的问题损害了我们在店里的声誉 此问题是 Excel 插件 office js 中的工作表在滚动后被冻结 我编写了一个简单的脚本实验室片段代码 它重现了工作表冻
  • 元素不存在,尽管它具有 ID 属性

    在 selenium excel vba 中 我试图了解有关如何处理 CSS 选择器的更多信息 我很想知道 因为在检查带有 ID 的元素并运行代码时 我收到一条消息 指出未找到该元素 这是到目前为止的代码 Private bot As Ne
  • 如何在 Google 电子表格中使用 Google 脚本从相邻单元格获取值?

    如果之前有人问过这个问题 我深表歉意 但我已经寻找了一个例子 不幸的是我无法找到答案 因此我为什么在这里问 如果我在 Google 电子表格中有一个自定义函数 如果内容是动态生成的 我如何获取单元格的值 当它是固定值时我可以获取该值 但当它
  • excel中的多轴折线图

    我正在寻找类似于下图中的多轴折线图 这是由 amcharts 制作的 JavaScript 图表 excel有没有可以绘制图表的选项 请注意 有 3 个 Y 轴和 3 个折线图 可让您比较数据 是否有可能获得超过 3 个数据点 每个数据点在
  • Excel Q - 带有二维数组的 SUMIFS

    我有一个二维数组 水平轴上的日期和垂直轴上的标识号 我想要以特定日期和 ID 为条件的总和 并且我想知道如何使用 SUMIFS 来执行此操作 由于某种原因 我似乎不能 因为数组是二维的 而标准范围是一维的 谁能给我关于我可以使用的其他公式的
  • 使用 Apache POI 和 Java 创建 Excel (.xlsx) 文件后文件损坏

    我已经使用 Apache POI API 使用 Java 成功创建了 xlsx 格式的工作簿 Excel 我的代码如下 在 D 盘创建一个名为 RiponAlWasim xlsx 的文件 Workbook wb new XSSFWorkbo
  • 检查所选单元格是否在特定范围内

    我正在使用 C 创建 Excel 加载项 如何检查选定的 或代码中范围表示的单元格 是否在特定范围内 例如如何检查单元格 P 5 是否在 A 1 Z 10 范围内 Use Application Intersect 像这样 在VBA中 Su
  • Gmail 菜单按钮

    我希望编写一个 Google 脚本来存档所有早于某个日期的电子邮件 在该脚本中 我将添加一个自定义按钮 就像在 Google Sheets 中一样 以便我可以运行我的脚本 Google 脚本中是否存在向 Gmail 中的 UI 添加菜单 按
  • 如果字符串包含列表中的单词,则返回与列表值相邻的值

    目前我有一组单元格 每个单元格在无用的信息中都有一个唯一的标识符 我还有这些唯一标识符的列表 以及每个标识符对应的值 我想做的是找到一个单元格包含哪个标识符 如果有的话 然后输出相应的值 下面是一个例子 https i stack imgu
  • Excel如何获取一个时间间隔内的小时数?

    我有两列 Night shift start 19 00 Night end 04 00 我每天都有一些日期列 Work started 07 30 Worked ended 22 00 我想获取夜班开始和夜班结束之间的小数小时数 我需要计
  • 如何将 Excel 中的图表导出为图形

    我有一系列 Excel 电子表格 每个电子表格至少包含一页数据和一页根据数据创建的图表 我需要捕获 不从数据中重新生成 将现有图表作为网络友好图像 这可以通过 Java 或 Net 实现吗 我知道 POI 的东西 Java 不会这样做 或者
  • 有没有办法将 Excel 单元格条目转换为一致的日期和时间格式?

    我正在处理雨量计数据记录器生成的 csv 文件中的一些雨量计数据 我发现日期和时间的记录不一致 以以下两种格式之一交替显示 Format 1 mm dd yyyy hh mm 24 hour clock or Format 2 mm dd
  • 复制电子表格也会复制所有链接的文件

    当我使用库方法时 我希望能够仅复制电子表格及其所有工作表以及所有定义的工作表名称 spreadSheet copy newSSName Or myFile makeCopy newNameOfFile 目前 这些方法复制所有链接的表单和表单
  • 如何使用 Google Sheets onEdit() 触发器运行函数来更新 Google Form

    我有一个 Google 表格工作簿 其中有一个工作表 我想用它来保存工作簿和 Google 表单的设置 我做了一个定制onEdit 触发两个函数的函数 一个用于更新工作簿 另一个用于更新表单 function onEdit e var ra
  • Windows Azure 远程站点“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册[重复]

    这个问题在这里已经有答案了 以下代码在我的本地开发计算机上可以正常运行 但是当我部署它时 我收到以下错误消息Azure 远程网站 我已经查看了SO答案和谷歌搜索结果 但我仍然不清楚我必须在本地计算机上安装什么 这样当我将代码推送到Azure
  • 拆分具有多行文本和单行文本的行

    我试图弄清楚如何拆分数据行 其中行中的 B C D 列包含多行 而其他列不包含多行 我已经弄清楚如何拆分多行单元格 如果我将这些列复制到新工作表中 手动插入行 然后运行下面的宏 仅适用于 A 列 但我在编码时迷失了休息 Here s wha

随机推荐

  • 如何创建链式管道?

    我想创建一个简单的链式管道 我发现this https stackoverflow com questions 33658355 piping output from one function to another using python
  • SSIS 脚本组件不允许文本流输出

    我正在尝试使用 SSIS 将 JSON 文件导入到我的数据库中 由于我使用的是 SQL Server 2016 因此我可以将文件放在一行中并使用 OPENJSON 读取它们 我的问题是不想只引入 JSON 文本 我还想需要从文件名和当前目录
  • 如何将CAP文件加载到java卡

    我是java卡的新手 你能帮我看看如何将Applet CAP文件解析为APDU吗 用于将此 CAP 文件安装到支持 GP2 2 的卡上 你应该尝试使用GPShell http sourceforge net projects globalp
  • 无法在 Mac OS X 10.6 上的 Python 中将 Matplotlib 中的字体更改为 Helvetica

    我正在尝试将 matplotlib 字体更改为 helvetica 我想在 PDF 图中使用它 我尝试以下操作 import matplotlib matplotlib use PDF import matplotlib pylab as
  • 将用户重定向到不同 ASP.NET Core Razor 网站中的页面

    我有一个 ASP NET Core 2 1 Razor 应用程序 其中有两个在登录前处于活动状态的菜单项 我想在单击任一菜单项时转移 重定向 到其他网站 我尝试过重定向 如下所示 但当前 url 添加到我指定的字符串中 public IAc
  • 根据水年创建日索引

    我正在处理水文数据 我需要水年 我已经根据之前在此论坛上发布的功能成功创建了一个水年专栏 我想要的是有一个陪伴water day范围从 1 365 闰年为 366 以匹配水年序列 请注意 水年是由其结束的日历年指定的 例如 2010水年从2
  • Linux IPC:共享内存回收

    我有两个进程 生产者和消费者 通过使用生成的共享内存段进行通信 old https stackoverflow com questions 21311080 linux shared memory shmget vs mmap接口而不是 m
  • 将 ENGINE 上下文附加到 SSL_CTX

    我想知道是否有可能附加一个ENGINE 实施到SSL CTX and or SSL 结构 我想要实现的是拥有一个SSL CTX 将使用 OpenSSL 中内置的默认加密操作和另一个设置SSL CTX 将使用专用 HSM 作为加密层 我可以通
  • Ext.data.Store getTotalCount() 加载后不计算

    我的商店在调用时并不总是返回正确数量的记录getTotalCount 这个问题出现在我之后load 商店 我知道在检查时商店里有记录 我正在使用 ExtJs 4 1 3 this grid reference to my grid var
  • Swift:使用未声明的类型

    我正在实现一个类 但出现此错误 使用未声明的类型 myProtocol 这是我的代码 class LocalContactService myProtocol 你们中有人知道为什么我会收到此错误吗 我遇到了同样的错误 在我的情况下 我意外地
  • shinyapps setAccountInfo 错误

    当我尝试配置我的shinyapps根据以下指南在 my shinyapps io 上注册帐户信息https github com rstudio shinyapps blob master guide guide md https gith
  • Excel VBA - 将图表保存为 GIF 文件

    编程不是我的主要工作职能 但似乎是我所认为的瑞士军刀 我的任务是在 Excel 中制作一个 VBA 宏 将图形导出到 gif 文件 以便自动更新我们制造工厂的信息屏幕 我有一个可以工作的宏 但是 它有时会失败并创建一个具有正确文件名但 空
  • 实体框架中实体之间的复杂关系

    也许它是重复的 但我找不到任何这样的主题 我正在使用实体框架 数据库中有两个表 public class A public virtual B B1 get set public virtual B B2 get set public cl
  • ORA-01722: 实体框架上的编号无效

    我正在从 Oracle DB 执行一个存储过程 即 PROCEDURE GET TIM USER CUSTO P ANOMES IN VARCHAR USER CUSTO OUT SYS REFCURSOR IS BEGIN OPEN US
  • 如何从特定的目标文件生成特定的二进制文件?

    这是我的 makefile 我在 obj 目录中有目标文件 我需要将它们编译成 bin 文件夹中的二进制文件 但不知何故它无法按我希望的方式工作 有什么想法吗 SOURCES wildcard c OBJECTS patsubst c o
  • 安卓用C++还是Java?

    我正在考虑在空闲时间学习 Android 开发 我发现 Java 和 C 都可以进行开发 但后者是有限的 我对 C 更加满意 所以我的问题是 Android 上的 C 存在哪些限制 我能够用它开发完整的应用程序吗 还是我最终必须学习 Jav
  • C 中数组的理想数据类型

    我想存储键和可变大小数组之间的静态关联 foo gt bar awe foo2 gt bar2 awe2 gruh 该数组在程序执行期间永远不会改变 它只是将字符串变量数组与字符串键静态关联的一种方法 子阵列的数量非常少 我怎样才能纯粹地做
  • 等待 .forEach() 完成的最佳方法

    有时我需要等待 forEach 方法来完成 主要是 加载器 功能 这就是我这样做的方式 q when array forEach function item iterate on something then function contin
  • Google 地图 v3 折线工具提示

    谷歌地图标记对象 google maps Marker 有一个 title 属性 因此当用户将鼠标移到标记上时 会显示一个简单的工具提示 折线 google maps Polyline 上没有标题属性 有没有办法可以在 V3 中做到这一点
  • 如何使用谷歌脚本打开位于谷歌驱动器文件夹中的Excel文件?

    我需要打开给定的谷歌驱动器文件夹中的 Excel 文件并读取其数据 为此 我使用了以下代码 var folders DriveApp getFoldersByName Test Folder var foldersnext folders