讲师中心 微信公众号
AI工具推荐 视频效率加速

如何通过 Google Sheets 链接自动获取文件最后修改时间与修改人邮箱

星辰君_9469

星辰君_9469

发布时间:2026-02-21 10:22:01

|

872人浏览过

|

来源于php中文网

原创

如何通过 Google Sheets 链接自动获取文件最后修改时间与修改人邮箱

本文介绍如何使用 google apps script 批量从 sheet 中的 google docs/sheets 链接提取「最后修改时间」和「修改人邮箱」,并安全写入相邻列,解决列数不匹配报错问题。

本文介绍如何使用 google apps script 批量从 sheet 中的 google docs/sheets 链接提取「最后修改时间」和「修改人邮箱」,并安全写入相邻列,解决列数不匹配报错问题。

在自动化办公场景中,常需追踪共享文档的更新动态——例如确认某份合同、预算表或项目看板是否被最新编辑过,以及由谁操作。你已成功实现通过 URL 提取最后修改时间,但希望进一步获取修改人的邮箱(或姓名),并避免运行时报错 Exception: The number of columns in the data does not match the number of columns in the range。本文将为你提供完整、健壮、开箱即用的解决方案。

✅ 核心原理:Drive API 精准获取元数据

Google Sheets 原生 DriveApp.getFileById(id).getLastUpdated() 仅返回时间,不包含修改人信息。要获取 lastModifyingUser(含 emailAddress 和 displayName),必须调用 Google Drive REST API v2 的 files.get 方法——它支持细粒度字段筛选(通过 fields 参数),响应轻量且权限可控。

google-sheets-soha
google-sheets-soha

读取并分析Google表格数据。当用户提到“Google表格”、“电子表格”、“表格”,或发送 docs.google.com/spreadsheets 链接时触发。

下载

⚠️ 注意:此功能依赖 Drive API 已启用。请务必按以下步骤提前配置:

  1. 在脚本编辑器中点击 Services(服务)→ Add a service(添加服务);
  2. 搜索并启用 Drive API(图标为蓝色齿轮);
  3. 保存后首次运行会提示授权,同意即可。

✅ 修复后的完整脚本(推荐使用邮箱字段)

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  const range = sheet.getRange("H2:H" + sheet.getLastRow()); // 注意:列名大写更规范
  const values = range.getRichTextValues()
    .map(([cell]) => {
      const link = cell.getLinkUrl();
      if (!link) return [null, null]; // 空链接 → 双空值占位(保持列对齐)

      // 安全提取文件 ID(兼容 docs/sheets/forms/drive 文件)
      const idMatch = link.match(/\/d\/([-\w]+)/);
      const id = idMatch ? idMatch[1] : null;

      if (!id) return [null, null];

      try {
        // 调用 Drive API 获取指定字段:modifiedDate 和 emailAddress
        const response = Drive.Files.get(id, { 
          fields: "modifiedDate,lastModifyingUser(emailAddress)" 
        });

        const modifiedDate = response.modifiedDate 
          ? new Date(response.modifiedDate) 
          : null;
        const email = response.lastModifyingUser?.emailAddress || null;

        return [modifiedDate, email];
      } catch (e) {
        console.error(`Failed to fetch metadata for ID ${id}:`, e.message);
        return [null, null]; // 错误时仍返回双空值,避免写入中断
      }
    });

  // ✅ 关键修复:明确指定目标区域维度(行数 × 列数)
  // 将结果写入 I2:J{n}(即 H 列右侧两列,从第2行开始)
  range.offset(0, 1, values.length, 2).setValues(values);
}

? 脚本关键优化说明

优化点 说明
✅ 安全的 ID 提取 使用正则 /\/d\/([-\w]+)/ 替代 split("/")[5],避免因 URL 格式变化(如带参数 ?usp=sharing)导致索引越界或错误 ID
✅ 显式维度控制 range.offset(0, 1, values.length, 2) 明确声明写入区域为 values.length 行 × 2 列,彻底解决报错 "data has 1 but range has 2"
✅ 异常防护 try...catch 捕获 Drive API 调用失败(如文件不存在、无访问权限、配额超限),确保单条失败不影响整体执行
✅ 空值兜底 所有分支均返回 [null, null],保障 setValues() 输入数组结构统一(每行始终为 2 元素数组)

? 使用前必读注意事项

  • 权限要求:脚本需获得 https://www.googleapis.com/auth/drive.metadata.readonly 权限(启用 Drive API 后自动申请);
  • 文件可见性:仅能获取当前用户有查看权限的文件元数据。若链接指向私有文件且你无权访问,API 将抛出 403 错误;
  • 列映射建议:
    • H2:H:输入列(含超链接的 Google 文档 URL);
    • I2:I:自动填充「最后修改时间」(日期格式,可设单元格格式为 yyyy-mm-dd hh:mm:ss);
    • J2:J:自动填充「修改人邮箱」(纯文本);
  • 如需显示姓名而非邮箱:将 lastModifyingUser(emailAddress) 改为 lastModifyingUser(displayName),并把 response.lastModifyingUser?.emailAddress 替换为 response.lastModifyingUser?.displayName;
  • 批量性能:该脚本为同步调用,处理数百行通常在 10 秒内完成;若需处理上千行,建议分批调用或改用 UrlFetchApp + 批处理(进阶场景)。

? 总结

通过启用 Drive API 并采用结构化字段请求(fields),我们不仅能可靠获取修改时间与邮箱,更能以工程化方式规避常见运行时错误。本方案兼顾新手友好性(清晰注释、防错逻辑)与生产可用性(权限、性能、日志)。只需三步:启用 API → 粘贴脚本 → 运行 myFunction,即可实现文档更新责任到人的自动化审计。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1678

2024.03.01

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

1847

2023.09.19

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5430

2024.08.16

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

486

2025.12.13

Figma AI自动化智能数据填充与交互生成实战
Figma AI自动化智能数据填充与交互生成实战

告别机械重复,详细演示如何用 AI 填充业务真实数据,并自动为页面添加交互连线,将静态设计稿快速转变为动态原型。

305

2026.05.13

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

60

2026.10.16

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

40

2026.10.16

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

40

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn