gogcli 表格斑马纹实战gog sheets banding 命令的完整用法与底层原理【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli本篇指南以 gogcli 的gog sheets banding命令族为核心系统讲解如何在 Google Sheets 中通过终端管理交替颜色条纹banding / banded ranges如何给指定区域套上默认或自定义的条纹样式、如何列出工作簿中所有已存在的条纹范围、如何按 ID 或按工作表批量清除。读完本文你将掌握banding set/banding list/banding clear三个子命令的完整参数、默认配色机制、JSON 输出契约并了解其背后AddBandingRequest/DeleteBandingRequest的 Sheets API 调用链。命令总览一个父命令、三个子命令gog sheets banding是gog sheets下的子命令官方描述为 Manage alternating color banding管理交替颜色条纹。其标准用法为gog sheets (sheet) banding (banded-ranges) command从 命令注册源码 可以看到父命令SheetsBandingCmd挂接了三个子命令且均带有常用别名子命令别名作用list默认子命令—列出交替颜色的条纹范围List alternating color banded rangessetadd、create给指定区域应用交替颜色Apply alternating colors to a rangecleardelete、rm、remove移除交替颜色条纹Remove alternating color banding因为list被标记为default:withargs所以在某些场景下直接gog sheets banding spreadsheetId也会落入列表行为显式写出子命令名仍然是更稳妥的写法。父命令继承的全部全局标志Flags如下源自 命令参考页FlagTypeDefaultHelp--access-tokenstring直接使用给定 access token绕过存储的 refresh tokentoken 约 1 小时后过期-a/--account/--acctstring账户邮箱、别名或auto--clientstringOAuth client 名称选择存储的凭据 token 桶--colorstringauto颜色输出auto|always|never--disable-commandsstring禁用命令的逗号分隔列表允许点路径-n/--dry-run/--dryrun/--noop/--previewbool不实际变更打印预期操作后成功退出--enable-commandsstring允许命令前缀的逗号分隔列表允许点路径用于收窄 CLI--enable-commands-exactstring精确允许的命令列表父命令不会连带启用子命令-y/--force/--assume-yes/--yesbool跳过破坏性命令的确认--gmail-no-sendboolfalse阻止 Gmail 发送操作agent 安全-h/--helpkong.helpFlag显示上下文相关帮助--homestring覆盖 gogcli 配置/数据/状态/缓存根目录等价于GOG_HOME-j/--json/--machineboolfalse以 JSON 输出到 stdout最适合脚本--no-input/--non-interactive/--noninteractivebool从不交互提示直接失败适合 CI-p/--plain/--tsvboolfalse输出稳定可解析的 TSV 文本无颜色--quota-projectstring用于 API 计费的 Google Cloud 项目以X-Goog-User-Project发送--readonlyboolfalse运行时阻止变更类 API 请求--results-onlyboolJSON 模式下只输出主结果丢弃 envelope 字段--select/--pick/--projectstringJSON 模式下选择逗号分隔的字段支持点路径-v/--verbosebool开启详细日志--versionkong.VersionFlag打印版本并退出--wrap-untrustedboolfalseJSON/raw 输出中为抓取的文本字段加上外部不可信内容包裹标记其中对 banding 工作流影响最大的四个是--dry-run预览变更、-y跳过清除确认、-jJSON 输出、--readonly只读模式会拦截 set/clear 这类变更请求。banding set为区域应用交替颜色用法与参数gog sheets (sheet) banding (banded-ranges) set (add,create) spreadsheetId range [flags]位置参数spreadsheetId工作簿 IDrange带表名的 A1 区域例如Sheet1!A1:H20。参数帮助文本明确要求 A1 range with sheet name源码中通过parseSheetRange(rangeSpec, banding)解析随后gridRangeFromMap会把表名换算为sheetId组成 API 需要的GridRange见 sheets_banding.go。子命令特有的两个标志Flag说明--row-properties-json行方向条纹的 Sheets APIBandingPropertiesJSON--column-properties-json列方向条纹的 Sheets APIBandingPropertiesJSON两个 JSON 参数至少提供一个参数校验函数bandingProperties会在两者都为空时直接报provide row or column banding properties。此外resolveInlineOrFileBytes说明这些参数既接受内联 JSON 字符串也接受以方式引用的文件内容方便从文件加载复杂样式。默认配色什么都不传时的行条纹样式如果你只传--row-properties-json之外的空值、完全不传行属性 JSONsheetsbanding 包的DefaultRowProperties()会提供一套默认的淡蓝色系条纹func DefaultRowProperties() *sheets.BandingProperties { return sheets.BandingProperties{ HeaderColorStyle: sheets.ColorStyle{RgbColor: sheets.Color{Red: 0.88, Green: 0.93, Blue: 1}}, FirstBandColorStyle: sheets.ColorStyle{RgbColor: sheets.Color{Red: 1, Green: 1, Blue: 1}}, SecondBandColorStyle: sheets.ColorStyle{RgbColor: sheets.Color{Red: 0.96, Green: 0.98, Blue: 1}}, } }颜色槽位RGB0–1 浮点视觉效果headerColorStyle(0.88, 0.93, 1.00)淡蓝色表头行/列firstBandColorStyle(1.00, 1.00, 1.00)白色第一个交替带secondBandColorStyle(0.96, 0.98, 1.00)极浅蓝色第二个交替带也就是说gog sheets banding set id Data!A1:F100不加任何 JSON 时默认给该区域加上淡蓝表头 白/浅蓝交替行的经典斑马纹。若需要自定义颜色示例如下# 自定义红色系行条纹 gog sheets banding set $SPREADSHEET_ID Data!A1:H200 \ --row-properties-json {headerColorStyle:{rgbColor:{red:0.85,green:0.3,blue:0.3}}, firstBandColorStyle:{rgbColor:{red:1,green:0.97,blue:0.97}}, secondBandColorStyle:{rgbColor:{red:1,green:0.93,blue:0.93}}}JSON 解析的严格性DecodeProperties 对输入 JSON 做了两层严格校验单元测试 逐一覆盖了这两条路径decoder.DisallowUnknownFields()出现未知字段如{unknown:true}立即报unknown field错误避免拼错字段名后被静默丢弃拒绝多个 JSON 值如{} {}报multiple JSON values。这意味着脚本里传入的BandingPropertiesJSON 必须与 Sheets API 的字段定义完全一致拼写错误会快速失败而不是产生看起来执行成功的脏请求。底层调用链set的执行路径在 SheetsBandingSetCmd.Run校验spreadsheetId与range非空解析 A1 区域解析行/列属性 JSON行属性缺省回落到DefaultRowProperties()列属性没有默认值dryRunExit支持--dry-run预览fetchSheetIDMap拉取工作簿的表名 → sheetId 映射gridRangeFromMap把 A1 区域转换为GridRange通过 sheetsbanding.BuildAddRequest 构造sheets.Request{AddBanding: ...}并用svc.Spreadsheets.BatchUpdate一次性下发从resp.Replies[0].AddBanding.BandedRange中提取服务端分配的bandedRangeId。成功后的输出契约人类可读模式Applied banding id to rangeJSON 模式-j{spreadsheetId: ..., bandedRangeId: ..., range: ...}——bandedRangeId正是后续clear --id所需的 ID两者形成完整的脚本闭环。banding list清点工作簿中所有条纹范围用法gog sheets (sheet) banding (banded-ranges) list spreadsheetId [flags]子命令特有标志只有一个--sheet用于只列出指定工作表内的条纹。实现细节list 命令的实现 复用了通用的runSheetsSpreadsheetList帮助函数并带有两处值得注意的设计字段裁剪GET 请求只取sheets(properties(sheetId,title),bandedRanges)不拉取单元格数据因此对大表也是轻量操作结构化输出数据被规整为 sheetsbanding.Item包含bandedRangeId、sheetId、sheetTitle、a1由 sheetsa1.FormatGridRange 生成的 A1 表示、原始range以及完整的rowProperties/columnProperties。默认表格模式输出三列定义见 sheets_presentation.goBANDED_RANGE_ID、SHEET、RANGE。当工作簿没有任何条纹时打印占位行No banded ranges。典型用法# 列出全簿条纹范围 gog sheets banding list $SPREADSHEET_ID # 只看某个工作表并输出 JSON 供脚本处理 gog sheets banding list $SPREADSHEET_ID --sheet Data Set -jJSON 模式下每个条目都会携带rowProperties/columnProperties完整结构可以据此审计当前条纹配色是否与规范一致。banding clear按 ID 或按工作表清除条纹用法与互斥规则gog sheets (sheet) banding (banded-ranges) clear (delete,rm,remove) spreadsheetId [flags]Flag类型说明--idint64要移除的 Banded Range ID--allbool移除指定工作表的全部条纹--sheetstring--all模式下的目标工作表名源码中的参数校验 强制三条规则--id与--all互斥同时出现报use either --id or --all, not both两者必须至少提供一个provide --id or --all--all必须搭配--sheet--sheet is required with --all。两种清除路径SheetsBandingClearCmd.Run 按参数走两条路径按 ID 删除直接通过 sheetsbanding.DeleteRequest 构造一条DeleteBanding请求无需先查询工作簿按表全量删除先发起一次裁剪字段的 GETsheets(properties(title),bandedRanges(bandedRangeId))用 IDsForSheet 按表名精确匹配找不到表名会报unknown sheet ...再为每个bandedRangeId生成一条删除请求合并成一个BatchUpdateSpreadsheetRequest一次性下发。输出契约文本模式Removed n banded ranges若没有任何可删项打印No banded ranges to removeJSON 模式{spreadsheetId: ..., removed: n}。破坏性操作的确认与 dry-runclear被标记为破坏性命令无论走哪条路径最终都会经过dryRunAndConfirmDestructive见 源码。这意味着交互环境下默认弹出确认可用-y跳过--dry-run时只打印即将发送的删除请求含spreadsheet_id、banded_range_id、sheet、removed等字段后成功退出配合--no-input使用时缺少必要信息会直接失败而非挂起等待输入适合 CI 场景。与脚本、Agent 集成的实用模式结合前面三个子命令的输出契约一个典型的规范化斑马纹流水线可以写成# 1. 清除旧条纹按表全量 gog sheets banding clear $SPREADSHEET_ID --all --sheet Data -y # 2. 重新应用统一样式 gog sheets banding set $SPREADSHEET_ID Data!A1:H500 \ --row-properties-json ./banding-row.json -j # 3. 校验结果 gog sheets banding list $SPREADSHEET_ID --sheet Data -p三个要点set返回的bandedRangeId与list输出的BANDED_RANGE_ID列同源均可用于clear --id精确清理全程可用-j/-p得到机器可读输出--results-only还能进一步去掉 envelope 字段在 Agent 受控环境下--readonly、--enable-commands/--disable-commands等全局标志父命令页已列出可以限制 CLI 仅执行读操作避免自动化流程误改工作簿。测试与实现证据internal/sheetsbanding/banding.goBandingProperties解码严格拒绝未知字段与多值 JSON、默认行配色、AddBanding/DeleteBanding请求构造、Items/IDsForSheet数据规整internal/sheetsbanding/banding_test.go覆盖解码错误路径、BuildAddRequest请求结构、Items的 A1 格式化断言Data Set!A1:B10以及DeleteRequestinternal/cmd/sheets_banding.go三个子命令的 Kong 注册、参数校验、dry-run 与确认逻辑internal/cmd/sheets_advanced_test.go端到端验证 banding set 默认携带行属性、list 有输出、clear 生成正确的DeleteBanding.BandedRangeId约 L236–L276 区间docs/commands/gog-sheets-banding.md、gog-sheets-banding-set.md、gog-sheets-banding-list.md、gog-sheets-banding-clear.md由gog schema --json生成的命令参考页make docs-commands再生成。小结gog sheets banding把 Sheets API 中较冷门的bandedRanges资源收敛成了set/list/clear三个高内聚子命令set支持 A1 区域 严格校验的BandingPropertiesJSON行属性有淡蓝默认配色list以裁剪字段的轻量 GET 输出带 ID 的结构化清单clear支持按 ID 精确删除或按表全量删除并对破坏性操作提供确认与 dry-run。三者以bandedRangeId为纽带构成了可在脚本与 Agent 流水线中安全复用的表格样式管理闭环。【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
