
gog sheets links get在终端中读取 Google Sheets 单元格超链接的完整指南【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli导读gog sheets links get是 gogcliGoogle Workspace in your terminal提供的电子表格超链接读取命令它能够一次性把指定区域Range内所有单元格中的超链接提取出来并自动换算成绝对 A1 坐标输出。本文以命令参考文档为主体结合 internal/cmd/sheets_links.go 源码与测试用例完整讲解该命令的用法、参数、输出格式以及底层实现原理帮助你用它做超链接审计、爬取链接清单、与脚本和 Agent 工作流对接。命令概览gog sheets links get是gog sheets links命令组的读取子命令对应的完整调用形式为gog sheets (sheet) links (hyperlinks) get (list,show) spreadsheetId range其中(sheet)、(hyperlinks)、(list,show)均为可省略的别名或中间路径。实际最常用的等价写法是gog sheets links get spreadsheetId range从源码可以看出get是links命令组的默认子命令default:withargs并带有list、show两个别名// internal/cmd/sheets_links.go type SheetsLinksCmd struct { Get SheetsLinksGetCmd cmd: default:withargs aliases:list,show help:Get cell hyperlinks from a range Set SheetsLinksSetCmd cmd: name:set aliases:write help:Set cell hyperlinks (rich-text links) }这意味着历史写法gog sheets links id range省略get依然有效向后兼容。命令的父级为 gog sheets links其中还包含写入方向的姊妹命令gog sheets links set。位置参数详解get子命令仅接收两个必填位置参数见 internal/cmd/sheets_links.gospreadsheetId— 电子表格 ID可以是裸 ID也可以是 Google Sheets 的分享链接。gogcli 内部会通过normalizeGoogleID实现位于 internal/cmd/googleid.go自动从 URL 中提取真实文件 IDdocs.google.com/spreadsheets/d/id/edit这类路径式 URL 会被提取出/d/之后的 ID 段drive.google.com的?id查询参数、/file/d/id/view、/drive/folders/id等路径同样支持即使粘贴时遗漏了https://前缀如docs.google.com/spreadsheets/d/...解析器也会补全协议后识别若输入不是可识别的 Google URL则原样返回去除首尾空白后的字符串因此裸 ID 直接可用。例如下面几种输入等价gog sheets links get 1AbC...xYz Sheet1!A1:B10 gog sheets links get https://docs.google.com/spreadsheets/d/1AbC...xYz/edit#gid0 Sheet1!A1:B10range— 读取区域A1 表示法范围遵循 Google Sheets 的标准 A1 表示法例如Sheet1!A1:B10。命令内部会对该参数做一次cleanRange处理见 internal/cmd/sheets.go把转义形式\!还原为!方便在 Shell 中直接传递而无需担心转义。全局 Flags 说明gog sheets links get继承 gogcli 全局 Flags与父命令 gog sheets links 保持一致FlagTypeDefaultHelp--access-tokenstringUse provided access token directly (bypasses stored refresh tokens; token expires in ~1h)-a--account--acctstringAccount email, alias, or auto for authenticated Google API commands--clientstringOAuth client name (selects stored credentials token bucket)--colorstringautoColor output: auto|always|never--disable-commandsstringComma-separated list of disabled commands; dot paths allowed-n--dry-run--dryrun--noop--previewboolDo not make changes; print intended actions and exit successfully--enable-commandsstringComma-separated list of enabled command prefixes; dot paths allowed (restricts CLI)--enable-commands-exactstringComma-separated list of exact enabled commands; dot paths allowed and parent commands do not enable children-y--force--assume-yes--yesboolSkip confirmations for destructive commands--gmail-no-sendboolfalseBlock Gmail send operations (agent safety)-h--helpkong.helpFlagShow context-sensitive help.--homestringOverride gogcli config/data/state/cache root (equivalent to GOG_HOME)-j--json--machineboolfalseOutput JSON to stdout (best for scripting)--no-input--non-interactive--noninteractiveboolNever prompt; fail instead (useful for CI)-p--plain--tsvboolfalseOutput stable, parseable text to stdout (TSV; no colors)--quota-projectstringGoogle Cloud project to bill for API usage (sent as X-Goog-User-Project; some APIs require it with --access-token or ADC)--readonlyboolfalseBlock mutating API requests at runtime; auth add also requests read-only OAuth scopes--results-onlyboolIn JSON mode, emit only the primary result (drops envelope fields like nextPageToken)--select--pick--projectstringIn JSON mode, select comma-separated fields (best-effort; supports dot paths). Desire path: use --fields for most commands.-v--verboseboolEnable verbose logging--versionkong.VersionFlagPrint version and exit--wrap-untrustedboolfalseIn JSON/raw output, wrap fetched text fields in external untrusted-content markers其中与读取类命令最相关的几个 Flag-a / --account指定认证账户邮箱、别名或auto多账户环境下必须显式选择-j / --json以 JSON 输出到 stdout是脚本化和 Agent 集成的最佳选择-p / --plain / --tsv输出稳定的 TSV 文本无颜色适合管道处理--readonly运行时拦截一切写请求配合gog auth add的只读 OAuth scope 使用适合只读审计场景--no-input在 CI 中永不交互式提示而是直接失败退出--results-onlyJSON 模式下只输出主结果丢弃nextPageToken等信封字段。输出格式表格模式默认未指定输出 Flag 时命中结果以表格形式打印表头为A1、VALUE、LINK列定义见 internal/cmd/sheets_presentation.goA1 VALUE LINK Sheet1!A1 docs https://docs.google.com/document/d/xyz Sheet1!B3 release https://github.com/example/releasesA1超链接所在单元格的绝对 A1 坐标含工作表名VALUE单元格的formattedValue显示文本LINK提取出的超链接 URL。若查询区域内没有任何超链接命令不会报错而是打印一行No links found并以成功状态退出见 internal/cmd/sheets_links.go。JSON 模式添加-j / --json后输出被包装为如下结构{ spreadsheetId: 1AbC...xYz, range: Sheet1!A1:B10, links: [ { sheet: Sheet1, a1: Sheet1!A1, row: 1, col: 1, value: docs, link: https://docs.google.com/document/d/xyz } ] }links数组中的每个元素与源码中的sheetsCellLink结构体一一对应见 internal/cmd/sheets_presentation.go字段语义sheet工作表标题a1绝对 A1 坐标row/col基于 1 的行、列号value单元格显示文本link超链接 URL。源码实现剖析命令如何拿到链接gog sheets links get的执行流程internal/cmd/sheets_links.go可以分为四步1. 参数校验与规范化spreadsheetID : normalizeGoogleID(strings.TrimSpace(c.SpreadsheetID)) rangeSpec : cleanRange(c.Range) if spreadsheetID { return usage(empty spreadsheetId) } if strings.TrimSpace(rangeSpec) { return usage(empty range) }缺少任一参数都会返回 usage 错误退出码 2。这一行为有测试用例佐证在 internal/cmd/sheets_validation_more_test.go 中SheetsLinksGetCmd{}缺 ID与SheetsLinksGetCmd{SpreadsheetID: s1}缺 range都会被断言为返回错误。2. 获取 Sheets 服务通过requireSheetsService见 internal/cmd/service_helpers.go完成账户选择与 OAuth 认证返回*sheets.Service。3. 调用 Sheets API 的Spreadsheets.Get这是整个命令的数据来源关键点在于精确的Fields选择器只拉取与超链接相关的字段避免下载整个网格数据resp, err : svc.Spreadsheets.Get(spreadsheetID). Ranges(rangeSpec). IncludeGridData(true). Fields(sheets(properties(title),data(startRow,startColumn,rowData(values(hyperlink,formattedValue,userEnteredFormat(textFormat(link(uri))),textFormatRuns(format(link(uri)))))))). Do()IncludeGridData(true)要求返回网格数据默认元数据请求不返回单元格内容Ranges(rangeSpec)只请求指定区域Fields(...)只取工作表标题、起始行列偏移、单元格的hyperlink、formattedValue、userEnteredFormat.textFormat.link.uri以及textFormatRuns中的富文本链接。4. 提取、去重并换算 A1 坐标extractCellLinksinternal/cmd/sheets_links.go从单个单元格中最多收集三种来源的链接并做去重整格链接cell.Hyperlink例如以HYPERLINK()公式或超链接粘贴产生的整格链接格式级链接cell.UserEnteredFormat.TextFormat.Link.Uri整格文本格式中携带的链接富文本分段链接遍历cell.TextFormatRuns收集每个 run 中Format.Link.Uri同一单元格中文字片段各自带链接的场景。三种来源均会先TrimSpace空串被跳过重复 URL 只保留一次。随后根据 API 返回的startRow/startColumn0 基偏移与行内索引换算为绝对坐标absRow : startRow ri 1 absCol : startCol ci 1再通过 internal/sheetsa1/format.go 中的FormatCell生成标准 A1 字符串——列号转字母A、B、…、Z、AA…工作表名按需加引号含特殊字符或纯数字时会以...!形式转义单引号翻倍保证输出坐标可直接回填给其他 sheets 命令使用。实战示例列出指定区域内的全部超链接gog sheets links get 1AbC...xYz Sheet1!A1:B10使用show别名、以 JSON 输出便于脚本解析gog sheets links show 1AbC...xYz Sheet1!A1:B10 --json配合jq提取 URL 列表gog sheets links get 1AbC...xYz Sheet1!A1:B10 --json \ | jq -r .links[] | [.a1, .value, .link] | tsv只读审计模式不携带写权限、不触发任何写操作gog sheets links get 1AbC...xYz Sheet1!A1:B10 --readonly --plain在 CI 中无交互执行并检查是否有外链if gog sheets links get 1AbC...xYz Sheet1!A1:B10 --json --no-input \ | jq -e .links | length 0 /dev/null; then echo 发现超链接请人工复核 else echo 该区域无超链接 fi与写入方向的联动gog sheets links setgog sheets links get是超链接读写闭环的读端写端由 gog sheets links set别名write承担两者共享同一个SheetsLinksCmd命令组。set 命令支持整格链接、多段富文本--runs-json、批量--cells-json支持文件与-标准输入以及 dry-run 预览其行为在 internal/cmd/sheets_links_set_test.go 中有完整覆盖。典型的读取—修改—回写工作流即为用get导出全部链接 → 脚本清洗/去重 → 用set批量写回。更多资源父命令gog sheets links完整命令索引Command index源码实现internal/cmd/sheets_links.goA1 坐标生成internal/sheetsa1/format.go参数校验测试internal/cmd/sheets_validation_more_test.go表格列定义与输出结构internal/cmd/sheets_presentation.go【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考