讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

Seko
Seko

AI短剧一键生成成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

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

梦枫大大_6499

梦枫大大_6499

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

|

741人浏览过

|

来源于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 这一典型错误。

Productivity Google Workspace
Productivity Google Workspace

Access Gmail, Calendar, Drive, Docs, and Sheets via the gws CLI or Python.

下载

✅ 核心改进点

  • 使用 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工具

更多
UpDream
UpDream Hot

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

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

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

火山引擎

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

DeepSeek

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

WorkBuddy

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

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的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的相关内容,可以阅读本专题下面的文章。

1698

2024.03.01

scripterror怎么解决
scripterror怎么解决

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

1049

2023.10.18

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

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

3400

2023.10.25

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

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

936

2023.08.08

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

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

6963

2024.05.29

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

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

5550

2024.08.16

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

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

526

2025.12.13

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

40

2026.11.06

热门下载

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

精品课程

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

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