0

0

Google Sheets 脚本:通过文档链接自动获取最后修改时间与修改者邮箱

霞舞

霞舞

发布时间:2026-02-21 11:38:02

|

681人浏览过

|

来源于php中文网

原创

Google Sheets 脚本:通过文档链接自动获取最后修改时间与修改者邮箱

本文介绍如何使用 google apps script 结合 drive api,从 google sheets 中的超链接批量提取对应文件的最后修改时间及修改者邮箱,并安全写入相邻列,同时解决常见维度不匹配报错问题。

本文介绍如何使用 google apps script 结合 drive api,从 google sheets 中的超链接批量提取对应文件的最后修改时间及修改者邮箱,并安全写入相邻列,同时解决常见维度不匹配报错问题。

在日常协作中,我们常需追踪共享表格(如项目看板、数据采集表)的更新责任人。虽然 Google Sheets 原生不支持“根据 URL 反查修改者”,但借助 Apps Script 调用 Drive API,可高效实现该功能——尤其适用于将多个 Sheet 链接集中管理在一张主表中,并自动同步其元数据。

以下是一个完整、健壮且已验证的解决方案。它扩展了原始脚本,不仅保留原有的「最后修改时间」功能,还新增「修改者邮箱」字段,并彻底规避 Exception: The number of columns in the data does not match the number of columns in the range 这一典型错误。

通塔师AI导航
通塔师AI导航

通塔师AI导航:专业的AI人工智能工具软件导航网站

下载

✅ 核心改进点

  • 使用 Drive.Files.get()(v2 API)精准获取 lastModifyingUser.emailAddress 和 modifiedDate;
  • 严格对齐输出数组维度,确保 setValues() 写入列数与目标区域一致;
  • 增加空链接/非法 ID 的防御性处理,避免运行中断;
  • 支持灵活切换返回 emailAddress 或 displayName。

? 完整脚本(推荐使用)

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  const lastRow = sheet.getLastRow();
  if (lastRow < 2) return; // 无数据时提前退出

  const range = sheet.getRange("H2:H" + lastRow);
  const values = range.getRichTextValues();

  const results = values.map(([cell]) => {
    const link = cell.getLinkUrl();
    if (!link || typeof link !== 'string') {
      return [null, null]; // 空链接或非字符串 → 双空值
    }

    // 从标准 Google Docs/Sheets URL 提取文件 ID(兼容 docs.google.com/drawings/spreadsheets)
    const idMatch = link.match(/\/d\/([-\w]+)/);
    const fileId = idMatch ? idMatch[1] : null;

    if (!fileId) {
      console.warn(`Invalid URL format, skipped: ${link}`);
      return [null, null];
    }

    try {
      // 调用 Drive API 获取元数据(需提前启用)
      const file = Drive.Files.get(fileId, {
        fields: "lastModifyingUser(emailAddress,displayName),modifiedDate"
      });
      const { emailAddress, displayName } = file.lastModifyingUser || {};
      const modifiedDate = file.modifiedDate ? new Date(file.modifiedDate) : null;

      // ✅ 返回双列:[修改时间, 邮箱] —— 严格 2 列,匹配 I & J 列
      return [modifiedDate, emailAddress || displayName || null];
    } catch (e) {
      console.error(`Failed to fetch metadata for ${fileId}:`, e.message);
      return [null, null];
    }
  });

  // ✅ 关键修复:明确指定 offset 区域的行列尺寸,避免维度错误
  // 将结果写入 I2:J{n}(即 H2:Hn 右侧两列)
  range.offset(0, 1, results.length, 2).setValues(results);
}

⚙️ 必备前提配置

  1. 启用 Drive API
    在脚本编辑器中,依次点击 Resources → Advanced Google services → 开启 Drive API
    同时点击右下角 Google Cloud Platform (GCP) Project → Manage → APIs & Services → Enable APIs and Services → 搜索并启用 “Drive API”

  2. 权限授权
    首次运行脚本时,系统会提示授权 https://www.googleapis.com/auth/drive.metadata.readonly —— 请确认允许。

  3. 数据格式要求

    • Column H(H2 起)必须为 富文本超链接(即用户手动插入的链接,非纯文本 URL);
    • 支持常见 Google 文档类型:Sheets、Docs、Slides、Drawings(URL 结构含 /d/{fileId}/)。

⚠️ 注意事项与最佳实践

  • 性能提示:若 H 列含上百个链接,建议分批处理(例如每次 50 行),避免 6 分钟执行超时。可添加 Utilities.sleep(100) 降低 QPS。
  • 权限边界:脚本仅能获取当前用户有访问权限的文件的修改者信息;若链接指向受限文档,将抛出 403 Forbidden 错误(日志可见)。
  • 显示名 vs 邮箱:如需展示姓名而非邮箱,将 return [modifiedDate, emailAddress || displayName || null]; 改为 return [modifiedDate, displayName || null];。
  • 错误排查:开启 View → Logs 查看 console.warn/error 输出,快速定位无效链接或权限问题。

✅ 总结

该脚本将「链接→元数据」自动化提升至生产级可用水平:结构清晰、容错性强、符合 Apps Script 最佳实践。部署后,只需在 H 列粘贴文档链接,运行一次 myFunction,I 列(时间)与 J 列(邮箱)即自动填充,大幅提升跨文档审计与责任追溯效率。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

246

2023.09.22

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

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

806

2024.03.01

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

371

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.25

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

419

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

527

2024.05.29

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

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

2622

2024.08.16

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

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

58

2025.12.13

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

796

2026.02.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 5.4万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号