ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

gogcli 终端控场指南:用 `gog slides` 命令族完整脚本化 Google Slides

gogcli 终端控场指南:用 `gog slides` 命令族完整脚本化 Google Slides gogcli 终端控场指南用gog slides命令族完整脚本化 Google Slides【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcligog slides是 gogcliGoogle Workspace in your terminal内置的 Google Slides 命令组它把演示文稿的创建、结构化编辑、文本样式、表格操作、模板批处理、导出与内省全部收敛为一条条可在终端直接执行、可进脚本的 CLI 命令。读完本文你将掌握gog slides全部 30 个核心子命令的用法、全局 flag 的作用边界以及如何借助--dry-run --json、修订号保护和原子批量更新安全地把幻灯片制作流程改造成可复现的自动化管线。命令概览一个命令组一个完整的 Slides 控制面gog slides在 internal/cmd/slides.go 中注册父命令用法为gog slides (slide) command [flags]其底层通过 internal/googleapi/slides.go 的NewSlides创建google.golang.org/api/slides/v1服务配合 Drive 服务完成模板复制、图片上传等跨服务操作。也就是说gog slides并非对 API 的简单转发而是把读—算—写三步先Presentations.Get读取当前结构再本地计算精确的BatchUpdatePresentationRequest最后带修订号保护写入封装成一条命令。全部子命令可分为六类分类子命令生命周期create、copy、create-from-template、create-from-markdown、export、info幻灯片结构new-slide、add-slide、delete-slide、duplicate-slide、move-slide、skip-slide、unskip-slide、list-slides文本编辑insert-text、replace-text、style-text、link、bullets、paragraph-style、update-notes、locate页面元素element、insert-image、replace-slide、insert-text原生表格table读取与导出read-slide、thumbnail、raw以下逐节展开完整子命令清单见 docs/commands/gog-slides.md父命令参考 gog命令总索引见 Command index。全局 Flags所有 Slides 命令共用的控制开关gog slides的每条子命令都继承以下全局 flag与 gogcli 其他命令组一致Flag类型默认值说明--access-tokenstring直接使用传入的 access token绕过已存储的 refresh tokentoken 约 1 小时过期-a--account--acctstring指定账户邮箱、别名或auto用于已认证的 Google API 命令--clientstringOAuth 客户端名称选择已存储的凭据和 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 的 config/data/state/cache 根目录等价于GOG_HOME-j--json--machineboolfalse向 stdout 输出 JSON最适合脚本--no-input--non-interactive--noninteractivebool永不提示失败则直接报错适合 CI-p--plain--tsvboolfalse向 stdout 输出稳定可解析的纯文本TSV无颜色--quota-projectstring用于 API 计费的 Google Cloud 项目作为X-Goog-User-Project发送部分 API 配合--access-token或 ADC 需要--readonlyboolfalse运行时阻止所有变更类 API 请求auth add也会申请只读 OAuth scope--results-onlyboolJSON 模式下只输出主结果丢弃nextPageToken等信封字段--select--pick--projectstringJSON 模式下按逗号分隔选择字段尽力而为支持点路径大多数命令推荐用--fields-v--verbosebool启用详细日志--versionkong.VersionFlag打印版本并退出--wrap-untrustedboolfalseJSON/raw 输出中把抓取的外部文本字段包进不可信内容标记使用建议脚本自动化优先组合--json结构化输出与--dry-run先验证请求尤其是配合--no-input在 CI 中避免交互卡死只读巡检加上--readonly运行时直接拦截所有变更请求是审计与安全审查场景的保险闸每条修改类命令都支持--dry-run --json打印即将提交的完整batchUpdate请求且不需要认证即可预览源码中如 slides_structural.go 在requireAccount之前先调用dryRunExit。演示文稿生命周期创建、复制、导出与元数据创建空白演示文稿或从模板复制gog slides create Q3 Planning # 创建空白演示文稿 gog slides create Q3 Planning --parent folderId # 指定目标文件夹 gog slides create Q3 Planning --template templateId # 从模板复制从源码看slides.gocreate走 DriveFiles.Createmime 为application/vnd.google-apps.presentation或Files.Copy并输出id、name、mime、link四列JSON 模式下输出整个file对象。复制与导出gog slides copy presentationId New Title # 复制并重命名 gog slides copy presentationId New Title --parent folderId gog slides export presentationId --format pdf --out deck.pdf # 导出 PDF gog slides export presentationId --format pptx --out deck.pptx # 导出 PPTX默认export的格式限定为pdf|pptx默认pptx通过 Drive export 通道实现exportViaDrive见 slides.go。--overwrite允许覆盖已存在的输出文件。元数据内省gog slides info presentationId --jsonslides info把 Drive 文件元数据与 Slides 原生元数据合并输出presentation对象中包含幻灯片数量、以点为单位的页面尺寸、locale、母版及主题色、以及全部布局layout——这是后续用--layout-id精确建页的前提。幻灯片结构操作建页、复制、排序、跳过与删除新建原生幻灯片new-slidenew-slide直接创建原生、可编辑的幻灯片而非渲染图片默认创建BLANK空白页gog slides new-slide presentationId gog slides new-slide presentationId --layout TITLE_AND_BODY --index 1--layout接受 Slides 预定义布局枚举BLANK、CAPTION_ONLY、TITLE、TITLE_AND_BODY、TITLE_AND_TWO_COLUMNS、TITLE_ONLY、SECTION_HEADER、SECTION_TITLE_AND_DESCRIPTION、ONE_COLUMN_TEXT、MAIN_POINT、BIG_NUMBER枚举定义见 slides_structural.go需要注意演示文稿主题可能移除或修改预定义布局选中当前 master 不存在的布局时 Google 会返回错误要精确使用主题布局先用slides info --json读出布局 object ID再--layout-id layoutId--layout与--layout-id互斥--index是零基插入位置省略则追加到末尾。整页图片幻灯片add-slidegog slides add-slide presentationId local-image.png \ --notes speaker notes \ --notes-file notes.txt \ --before slideId源码实现slides_add_slide.go展示了完整的实现链路校验图片格式PNG/JPG/GIF按扩展名映射 MIME把本地图片上传到 Drive 作为临时文件并授予anyone:reader公开读权限Slides API 需要可公开访问的 URL命令结束后defer删除该临时文件读取演示文稿得到页面宽高在单个批量更新中同时执行CreateSlideBLANK布局 可选的InsertionIndex和CreateImage尺寸铺满整页全出血图片若提供备注回读新幻灯片的 notes page找到 BODY 占位符后InsertText写入演讲者备注。复制与移动gog slides list-slides presentationId --json # 先拿到稳定的 slideId gog slides duplicate-slide presentationId slideId gog slides duplicate-slide presentationId slideId --to-index 2 gog slides move-slide presentationId slideId --to-index 0不带--to-index时复制页紧跟在源页之后带--to-index时复制与定位在同一个批量更新中完成DuplicateObjectUpdateSlidesPosition见 slides_structural.go移动索引为零基且指代的是移动前的演示文稿顺序与 Slides API 语义一致取值范围 0 到幻灯片总数新生成的页面 object ID 由gogSlide/gogDup前缀加纳秒时间戳组成保证脚本引用确定性。跳过与取消跳过gog slides skip-slide presentationId slideId # 别名 hide-slide gog slides unskip-slide presentationId slideId # 别名 unhide-slide跳过的幻灯片仍保留在文稿中、可继续编辑只是播放时不展示slides list-slides会为每页报告跳过状态JSON 输出使用isSkipped字段。删除gog slides delete-slide presentationId slideId删除属于破坏性操作交互式场景需要确认CI 中可配合--force。文本内容编辑定位、插入、替换与样式Slides 的文本范围使用UTF-16 code-unit 索引因此动稿前务必先精确定位元素 ID 与范围gog slides locate presentationId Quarterly revenue --all --json gog slides read-slide presentationId slideId --detail --json插入文本insert-textgog slides insert-text presentationId objectId New text --insertion-index 0 gog slides insert-text presentationId objectId Replacement --replace--replace的实现是先删后插删除旧文本后在同一位置插入新文本使新文本继承原段落可见文本的样式含模板继承见 docs/slides-text-editing.md。命令会先读取目标、钉住其修订号再原子提交删除偏移量在剔除 Google 剥离的控制字符/私用区字符后按 UTF-16 计算。查找替换replace-textreplace-text必须显式声明作用域无作用域形式会被拒绝# 单个 shape先读文稿用修订号保护 精确范围逐个删除再插入 gog slides replace-text presentationId old new --object objectId # 一页或多页 gog slides replace-text presentationId old new --page slideId # 显式全稿替换 gog slides replace-text presentationId old new --all--object、--page、--all三者互斥。从 slides_replace_text.go 可以看到校验逻辑--object与--page/--all互斥、--page与--all互斥、三者皆缺时报错要求显式作用域。object 作用域下命令会用locateSlidesText找出所有匹配从后往前逐个生成DeleteTextInsertText请求保证索引不漂移并带上WriteControl.RequiredRevisionId防并发覆盖。成功输出形如ok | revisionId... | replacedN。另外注意文本替换不会编辑 WordArt 文本。文本样式、链接与项目符号style-text、link、bullets都针对单个 shape 对象 固定 UTF-16 范围gog slides style-text presentationId objectId --range 4:21 \ --bold --font Georgia --size 24 --text-color #3366CC gog slides style-text presentationId objectId --range 4:21 --no-bold gog slides link presentationId objectId --range 4:21 \ --url https://example.com/details gog slides link presentationId objectId --range 4:21 --clear gog slides bullets presentationId objectId --range 0:42 --on \ --preset BULLET_DISC_CIRCLE_SQUARE gog slides bullets presentationId objectId --range 0:42 --off样式支持--bold/--no-bold、--italic/--no-italic、--underline/--no-underline成对互斥no-形式会强制发送字段以清除继承值、--text-color #RRGGBB|#RGB、--size点、--fontlink要求--url与--clear恰好二选一bullets要求--on/--off恰好二选一--on时可用--preset指定 bullet 预设默认BULLET_DISC_CIRCLE_SQUARE所有文本编辑都走runSlidesTextBatch见 slides_text_edit.go统一支持--dry-run --json预览精确请求、成功后输出revisionId。段落样式paragraph-style格式化单个 shape 内的所有段落或与可选 UTF-16 范围相交的段落也支持单个表格单元格gog slides paragraph-style presentationId objectId --align START --line-spacing 120 gog slides paragraph-style presentationId objectId --range 0:20 --space-above 0 --space-below 8 gog slides paragraph-style presentationId objectId --indent-start 18 --indent-first-line 0 gog slides paragraph-style presentationId tableId --row 0 --col 1 --align CENTER间距与缩进单位是点行距是百分比100 为正常。只修改显式提供的字段包括显式的 0 值。方向可用--direction LEFT_TO_RIGHT或RIGHT_TO_LEFT。表格单元格会先对照当前演示文稿校验再带修订保护写入。演讲者备注update-notesgog slides update-notes presentationId slideId --notes 备讲词 # 或 --notes-file原生表格创建、填字、结构变更与样式创建表格gog slides table create presentationId slideId --rows 3 --cols 4命令输出表格 object ID需要稳定 ID 时用--object-id指定便于后续脚本直接引用而无需解析响应。从 slides_table.go 可以看出一个值得注意的设计Slides API 在创建表格时忽略 size 和 transform 字段大小与位置由 Google 自行决定因此该命令不暴露几何参数避免给出提供方不兑现的结果。单元格文本gog slides insert-text presentationId tableId Revenue --row 0 --col 0 gog slides insert-text presentationId tableId $1.2M --row 1 --col 0 --replace--row与--col必须同时给出零基。--replace在单个批量更新内清空并写入目标单元格不影响其他单元格不带--replace追加/插入时可用--insertion-index指定单元格内偏移。行列与合并gog slides table row insert presentationId tableId --row 1 --below --count 2 gog slides table row delete presentationId tableId --row 3 --force gog slides table column insert presentationId tableId --col 0 --right gog slides table column delete presentationId tableId --col 2 --force gog slides table merge presentationId tableId --row 0 --col 0 --row-span 1 --col-span 3 gog slides table unmerge presentationId tableId --row 0 --col 0 --row-span 1 --col-span 3插入每次 1–20 行/列默认插在参考单元格上方/左侧可用--below/--right反向删除行/列必须--force锚点落在合并单元格内时会删除其跨越的所有行/列删除最后一行/列会删除整张表行高是最小值内容可能撑高列宽最小 32 点提供方下限结构变更命令都会先抓取提供方当前尺寸、拒绝越界、并基于抓取到的修订号提交写入。单元格样式与边框gog slides table cell style presentationId tableId --row 0 --col 0 \ --fill-color #3367d6 --content-align MIDDLE \ --bold --text-color #ffffff --size 18 --font Cambria gog slides table border style presentationId tableId \ --row 0 --col 0 --row-span 1 --col-span 3 --position OUTER \ --border-color #ea4335 --weight 2 --dash DASH--content-align取TOP/MIDDLE/BOTTOM文本样式默认作用于整格可用--range start:end限定 UTF-16 范围只影响文本填充与对齐仍作用于整格--fill-color与--fill-transparent互斥--position取ALL/OUTER/INNER/TOP/BOTTOM/LEFT/RIGHT/INNER_HORIZONTAL/INNER_VERTICAL虚线样式有SOLID/DOT/DASH/DASH_DOT/LONG_DASH/LONG_DASH_DOT边框粗细必须大于 0--border-color与--transparent互斥。页面元素操作原生 shape、线条、变换与分组slides element子命令族提供创建与操作原生页面元素的完整能力详细用法见 docs/slides-structure.md。创建 shape 与线条gog slides element create-shape presentationId slideId \ --type ROUND_RECTANGLE --x 24 --y 24 --width 180 --height 80 gog slides element create-line presentationId slideId \ --category STRAIGHT --x 50 --y 150 --width 240 --height 40几何默认以点为单位可--unit EMU换用英制计量单位。提供--object-id让后续脚本化变更具备确定性自定义 object ID 需符合 Slides API 5–50 字符的格式要求。仿射变换gog slides element transform presentationId objectId \ --translate-x 12 --translate-y 6 gog slides element transform presentationId objectId \ --scale-x 1.25 --scale-y 1.25 gog slides element transform presentationId objectId --rotate 15变换默认是相对模式--apply-mode ABSOLUTE替换现有变换。旋转围绕元素原点且同一请求中不能与显式 scale/shear 混用。样式、层级、分组、alt 文本与删除gog slides element style presentationId shapeId \ --fill-color #3367d6 --outline-color #ffffff --outline-weight 2 gog slides element style presentationId lineId --kind line \ --outline-color #ea4335 --outline-dash DASH gog slides element z-order presentationId objectId... --operation BRING_TO_FRONT gog slides element group presentationId objectId objectId... --group-id groupId gog slides element ungroup presentationId groupId... gog slides element alt-text presentationId objectId \ --title Chart --description Quarterly revenue by region gog slides element delete presentationId objectId --force颜色接受#RGB或#RRGGBB--fill-transparent/--outline-transparent关闭该属性的渲染z-order的目标必须位于同一页且未被分组group至少需要两个未分组元素且 Slides 不允许所有元素类型被分组传空--title或--description会清空对应 alt 文本字段元素删除是破坏性操作交互需要确认非交互需--force多个删除目标会合并在一个原子 API 批量中提交重复 ID 在提交前即被拒绝单目标输出保留objectId字段多目标改为输出objectIds。模板批量替换create-from-template 实战create-from-template是面向模板数据成稿场景的自动化利器详见 docs/slides-template-replacement.md。流程是先复制模板 → 校验 MIME 为演示文稿 → 在单个BatchUpdate里对全部占位符执行ReplaceAllText大小写敏感。占位符格式默认查找{{key}}形式模板中写{{name}}、{{date}}、{{company}}命令会为 key 自动补{{}}若 key 已含{{}}则不重复包裹--exact则按原始字符串精确匹配适合未采用{{}}约定的模板。源码见 slides_create_from_template.go。两种替换来源# 少量替换用 flag gog slides create-from-template 1abc123 Q1 Report \ --replace quarterQ1 2026 \ --replace revenue$1.2M \ --replace growth15% # 大量替换用 JSON 文件 gog slides create-from-template 1abc123 Monthly Report \ --replacements replacements.jsonJSON 文件中非字符串值自动转换数字125→125、布尔true→true、null→、复杂类型 JSON 编码。两种来源可混用--replaceflag 覆盖文件值。输出与统计gog slides create-from-template 1abc123 Report --replace nameJohn --json文本输出会打印新演示文稿id/name/link以及每个 key 的替换统计N occurrences或not foundJSON 输出则包含presentationId、name、link与replacements统计映射。替换统计直接来自 API 响应的OccurrencesChanged见 slides_create_from_template.go。批量生成脚本#!/bin/bash TEMPLATE_ID1abc123def456 while IFS, read -r name title date sales; do gog slides create-from-template $TEMPLATE_ID Report - $name \ --replace name$name \ --replace title$title \ --replace date$date \ --replace sales$sales \ --json output-$name.json done employees.csv常见排障0 occurrences检查占位符是否真实存在于模板、命名拼写默认大小写敏感、{{}}包裹是否正确或改用--exact权限被拒确认对模板有编辑权、OAuth client 已启用 Slides API模板复制失败核对模板 ID、账户可访问性、且对象确为演示文稿非文档/表格。Markdown 一键成稿create-from-markdowngog slides create-from-markdown title --content-file deck.md接受 vanilla markdown 与 slidey 风格 markdown语法约定完整记录在 docs/slides-markdown.md。核心能力每页 frontmatterlayout取title/hero/statement/center/default/two-cols/three-cols未知值回退到default裸---行作为幻灯片分隔符演讲者备注正文末尾的## Notes或### Notes段落转为该页备注其中 FA 图标短代码会被剥成纯文本--no-notes丢弃而非插入Font Awesome 图标:fa-name:/:fas-name:等短代码从cdn.jsdelivr.net拉取 FA Free SVG本地经rsvg-convert或 ImageMagick 栅格化为 PNG 插入无栅格化工具则跳过并告警--strict使其致命。前缀到样式的映射fa-→--fa-style默认solid、fas-→solid、far-→regular、fab-→brands、fal-/fad-→solidFA Free 无 light/duotone。图标放在列表项开头时渲染为文本左侧的小内联图段落中间的被丢弃Mermaid 图mermaid围栏代码块经本地mmdc二进制渲染为 PNG 全宽插入可用--mmdc指定路径空值关闭渲染缺 mmdc 时跳过并告警--strict致命多栏布局::cols::/::col2::/::col3::/::/cols::定义分栏::right::是::col2::的同义词在two-cols/three-cols布局下无需开头的::cols::::boxes::与::arrows::渲染为正文列表boxes 用 bullet 符号arrows 用→。资源管线实现见 slides_assets.go默认 30 秒 HTTP 超时、mmdc走 PATH、非 strict、不保留临时图所有图标/图示去重后统一上传 Drive授予公开读权限结束默认清理--keep-temp-images可保留。命令还支持--debug、--fa-style、--strict等 flag输出新建演示文稿 ID、名称与链接--json模式返回完整presentation与file对象。读取与内省read-slide、locate、raw、thumbnail结构化编辑要求先内省、后落笔四类读取命令覆盖不同粒度详见 docs/slides-introspection.mdread-slide默认输出 shape 文本、表格单元格文本、图片contentUrl/sourceUrl与演讲者备注--detail --json输出按视觉层级顺序扁平化的元素组内子元素带parentObjectIdgeometry是应用组与元素变换后的轴对齐包围盒点文本 run 保留 UTF-16startIndex/endIndex、样式、链接、段落样式与 bullet 元数据前景/背景色规范为#RRGGBB或theme:NAME见 slides_read_slide.golocate只读搜索 shape 与表格单元格文本返回页/元素 object ID 与精确 UTF-16 范围表格匹配还带零基行列默认只返回首个匹配--all或--occurrence N选择结果--fail-empty供要求必须匹配的自动化使用raw直接输出Presentations.Get的完整 JSONSlides API 无字段掩码输出无损--pretty美化。适合脚本与 LLM 消费注意响应中可能含短期有效的图片/视频 URL风险评估见 docs/raw-audit.mdthumbnail获取或下载渲染缩略图gog slides thumbnail presentationId slideId \ --size large --format png --out thumb.png --overwrite--size取small|medium|large默认 large--format取png|jpeg默认 png--out写入本地文件权限 0600/0700输出含contentUrl、宽高、字节数。安全落盘dry-run 预览、修订保护与只读约束贯穿全部修改命令的三重安全机制--dry-run --json每条变更命令在触达 Google 之前就打印出将要提交的精确batchUpdate请求且不需要认证源码在requireAccount之前调用dryRunExit非常适合先验证再执行修订号保护涉及读改写流程的命令如 object 作用域的replace-text、表格结构变更、add-slide备注写入会先用Presentations.Get抓取RevisionId写入时通过WriteControl.RequiredRevisionId绑定防止并发编辑导致覆盖成功输出携带revisionId--readonly运行时拦截所有变更请求配合--access-token/ADC 与--quota-project可在受限环境做只读巡检。小结gog slides的设计哲学可以概括为结构化、可预览、可脚本所有修改都收敛为显式作用域的批量请求任何操作都能先用--dry-run --json无认证预览写入全部带修订保护输出既有--json机器可读也有 TSV 人类可读。从create-from-markdown的文档驱动成稿到create-from-template的数据驱动批产再到read-slide/locate/raw的精确内省一条完整的内省—编辑—验证闭环让 Google Slides 真正具备了终端控场能力。建议从gog slides info --json与read-slide --detail --json起步熟悉对象模型再逐步接入模板与批量脚本。【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表