- CLI
- AI 应用
- MCP 服务
【免费下载链接】OfficeCLI
OfficeCLI is the first and best Office suite purpose-built for AI agents to read, edit, and automate Word, Excel, and PowerPoint files. Free, open-source, single binary, no Office installation required.
本篇技术指南以仓库中的 charts-radar.md 为骨架,完整讲解如何用 OfficeCLI 的officecli add --type chart命令在 PowerPoint 中生成雷达图(Radar Chart)及其全套样式定制。你将掌握radarstyle(standard / marker / filled)、标题图例、数据标签、坐标轴、序列样式、标记点、背景与样式预设的全部配置参数,并能用officecli query / get校验生成的 OOXML 结果;文末还会结合 ChartHelper.Setter.cs 与 ChartPresets.cs 等源码,讲清每个参数背后的底层实现。
一、演示文件组成与重新生成
雷达图示例由三个文件协同工作:
- charts-radar.py —— 调用
officecli命令生成演示文稿的 Python 脚本(officecli-sdk版本); - charts-radar.pptx —— 生成后的 8 页幻灯片(每页 4 张图,共 32 张雷达图);
- charts-radar.md —— 本文档对应的说明文件,把每一页映射到它演示的特性。
此外还有一份与 Python 脚本等价的 bash 版 charts-radar.sh,两条路径产出完全一致的charts-radar.pptx。重新生成的方式很简单:
cd examples/ppt/charts python3 charts-radar.py # → charts-radar.pptx二、数据与布局约定
在逐页讲解之前,先建立三组贯穿全部命令的公共素材:
CATS="Speed,Power,Range,Style,Tech,Price" # 六个维度类别 D="A:8,7,9,6,8,7" # 单序列数据 D2="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" # 双序列数据数据格式遵循 OfficeCLI 的惯例:序列名:值1,值2,...,多个序列用分号分隔。每个图表在幻灯片上占据一个四宫格位置(单位 in):
| 位置 | x | y | width | height |
|---|---|---|---|---|
| 左上 | 0.3 | 1.05 | 6.1 | 3 |
| 右上 | 6.95 | 1.05 | 6.1 | 3 |
| 左下 | 0.3 | 4.25 | 6.1 | 3 |
| 右下 | 6.95 | 4.25 | 6.1 | 3 |
从 charts-radar.py 的源码可以看到这四个格子在 SDK 中就是TL/TR/BL/BR四个字典。所有图表的共同参数是--type chart与--prop chartType=radar,它决定了后续一系列雷达图专属属性生效。
三、Slide 1:radarstyle 三种变体
雷达图在 OOXML 中由c:radarChart承载,OfficeCLI 通过radarstyle属性切换c:radarStyle元素的值。第一页的四张图分别演示standard、marker、filled三种样式,以及单序列场景:
CATS="Speed,Power,Range,Style,Tech,Price" officecli add charts-radar.pptx /slide[1] --type chart \ --prop chartType=radar --prop radarstyle=standard \ --prop title="radarstyle=standard" --prop legend=bottom \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" \ --prop x=0.3in --prop y=1.05in --prop width=6.1in --prop height=3in officecli add charts-radar.pptx /slide[1] --type chart \ --prop chartType=radar --prop radarstyle=marker \ --prop title="radarstyle=marker" --prop legend=bottom \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" \ --prop x=6.95in --prop y=1.05in --prop width=6.1in --prop height=3in officecli add charts-radar.pptx /slide[1] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop title="radarstyle=filled" --prop legend=bottom \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" \ --prop x=0.3in --prop y=4.25in --prop width=6.1in --prop height=3in officecli add charts-radar.pptx /slide[1] --type chart \ --prop chartType=radar --prop radarstyle=standard \ --prop title="single series" --prop legend=bottom \ --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" \ --prop x=6.95in --prop y=4.25in --prop width=6.1in --prop height=3inFeatures:chartType=radar、radarstyle(standard/marker/filled)
源码实现:radarstyle 是如何写进 OOXML 的
在 ChartHelper.Setter.cs 的case "radarstyle"分支中可以看到完整映射逻辑:
- 输入值先做大小写归一,再通过 switch 映射到 OOXML 枚举:
filled/fill→C.RadarStyleValues.Filledmarker→C.RadarStyleValues.Markerstandard/line→C.RadarStyleValues.Standard
- 非法值(如
radarstyle=area)会抛出ArgumentException,提示合法值为standard, filled, marker——这是"先校验后变更"的原子性设计,避免半成品写入文件。 - 写入方式为
radar.RemoveAllChildren<C.RadarStyle>()后PrependChild新的RadarStyle,即替换既有样式元素。
同时,ChartHelper.Builder.cs 把radarstyle列为add时接受的属性白名单之一,因此它既可以出现在创建命令中,也可以在officecli set时修改。
四、Slide 2:标题与图例
第二页集中演示标题字体族、图例位置、图例字体、图例叠加与自动标题删除:
officecli add charts-radar.pptx /slide[2] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop title="Styled title" --prop title.font=Georgia --prop title.size=20 \ --prop title.color=4472C4 --prop title.bold=true \ --prop legend=bottom --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" officecli add charts-radar.pptx /slide[2] --type chart \ --prop chartType=radar --prop radarstyle=standard \ --prop title="legend=top + legendFont" --prop legend=top \ --prop legendFont="10:333333:Calibri" \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" officecli add charts-radar.pptx /slide[2] --type chart \ --prop chartType=radar --prop radarstyle=standard \ --prop title="legend.overlay=true" --prop legend=topRight \ --prop legend.overlay=true \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" officecli add charts-radar.pptx /slide[2] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop autotitledeleted=true --prop legend=none \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6"参数语义:
title.font / title.size / title.color / title.bold:直接控制图表标题的字体、字号(磅)、颜色(十六进制 RGB,如4472C4)与是否加粗;legend:图例位置,可取bottom、top、topRight、none等;legendFont="10:333333:Calibri":图例文字样式,格式为字号:颜色:字体名,任意段可省略。据 chart.json 的 schema 定义,该格式为size:color:fontname(如10:CCCCCC:Arial);legend.overlay=true:让图例悬浮叠加在绘图区之上(配合topRight位置使用,不挤压绘图区);autotitledeleted=true:删除自动生成的图表标题,适合标题由外部文本框承担的场景。
Features:title.font/size/color/bold、legend位置、legendFont、legend.overlay、autotitledeleted
五、Slide 3:数据标签
数据标签通过dataLabels以逗号分隔的标志位组合控制,labelfont负责标签外观:
officecli add charts-radar.pptx /slide[3] --type chart \ --prop chartType=radar --prop radarstyle=marker \ --prop title="value" --prop dataLabels=value \ --prop labelfont="9:333333:Calibri" --prop legend=none \ --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" officecli add charts-radar.pptx /slide[3] --type chart \ --prop chartType=radar --prop radarstyle=marker \ --prop title="value,series" --prop dataLabels="value,series" \ --prop legend=bottom --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" officecli add charts-radar.pptx /slide[3] --type chart \ --prop chartType=radar --prop radarstyle=standard \ --prop title="value,category" --prop dataLabels="value,category" \ --prop legend=none --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" officecli add charts-radar.pptx /slide[3] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop title="dataLabels=none" --prop dataLabels=none \ --prop legend=bottom --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6"根据 chart.json 中dataLabels的 schema 说明,其取值规则为:none隐藏全部标签;否则用逗号列出标志位value、percent、category、series、all(也接受seriesName/categoryName/percentage/values别名);如果传入位置值(如outsideEnd、center、insideEnd、top、bestFit等)则隐式开启数值显示并作为标签位置。因此示例中的value,series表示"数值 + 序列名"的组合标签。
Features:dataLabels(value/series/category/none 或组合)、labelfont
六、Slide 4:坐标轴
雷达图的价值轴(radial axis)配置是第四页的重点,涵盖最小/最大值、主刻度间隔、轴字体、网格线与标签旋转、数字格式:
officecli add charts-radar.pptx /slide[4] --type chart \ --prop chartType=radar --prop radarstyle=standard \ --prop title="min/max + titles" --prop legend=none \ --prop axismin=0 --prop axismax=10 --prop majorunit=2 \ --prop axisfont="10:333333:Calibri" \ --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" officecli add charts-radar.pptx /slide[4] --type chart \ --prop chartType=radar --prop radarstyle=standard \ --prop title="gridlines + minorGridlines" --prop legend=none \ --prop gridlines="E0E0E0:0.3" --prop minorGridlines="F0F0F0:0.25" \ --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" officecli add charts-radar.pptx /slide[4] --type chart \ --prop chartType=radar --prop radarstyle=standard \ --prop title="labelrotation=30" --prop labelrotation=30 --prop legend=none \ --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" officecli add charts-radar.pptx /slide[4] --type chart \ --prop chartType=radar --prop radarstyle=standard \ --prop title="axisnumfmt=0.0" --prop axisnumfmt="0.0" --prop legend=none \ --prop categories="$CATS" --prop data="A:8,7,9,6,8,7"参数语义:
axismin=0/axismax=10:锁定径向轴取值范围;majorunit=2控制主刻度/主网格线间隔,让 0–10 区间按 0、2、4、6、8、10 出线;axisfont="10:333333:Calibri":轴标签字体,沿用字号:颜色:字体名三段式;gridlines="E0E0E0:0.3":主网格线样式,格式为颜色[:线宽[:虚线样式]],none移除(minorGridlines同格式,见 chart.json 中gridlines与minorGridlines的定义);labelrotation=30:类别轴标签旋转 30 度,适合维度名称较长的场景;axisnumfmt="0.0":轴数值数字格式,按 Excel 数字格式串处理。
Features:axismin/max、majorunit、axisfont、gridlines/minorGridlines、labelrotation、axisnumfmt
七、Slide 5:序列样式
第五页专门打磨数据序列的观感:配色、描边、渐变、阴影、透明度、逐序列渐变:
officecli add charts-radar.pptx /slide[5] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop title="colors + seriesoutline" --prop legend=bottom \ --prop colors="4472C4,ED7D31" --prop seriesoutline="000000:0.5" \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" officecli add charts-radar.pptx /slide[5] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop title="gradient + seriesshadow" --prop legend=none \ --prop gradient="FF6600-FFCC00" --prop seriesshadow="000000-5-45-3-50" \ --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" officecli add charts-radar.pptx /slide[5] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop title="transparency=40" --prop legend=bottom \ --prop transparency=40 \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" officecli add charts-radar.pptx /slide[5] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop title="per-series gradients" --prop legend=bottom \ --prop gradients="FF0000-0000FF;00FF00-FFFF00" \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6"参数语义:
colors="4472C4,ED7D31":按序列顺序覆盖填充色,未列出的序列沿用默认调色板;seriesoutline="000000:0.5":序列描边,格式颜色[:线宽[:虚线样式]],也接受-分隔符,none移除;gradient="FF6600-FFCC00":给所有序列统一应用渐变填充,格式c1-c2[-c3][:角度](角度单位度),例见 schema 中的FF0000-00FF00-0000FF:90;seriesshadow="000000-5-45-3-50":序列外阴影,格式颜色-模糊-角度-距离-不透明度,none移除;transparency=40:序列填充透明度(百分比);gradients="FF0000-0000FF;00FF00-FFFF00":逐序列渐变,分号分隔、每序列一条,数量必须与序列数一致。
Features:colors、seriesoutline、gradient、seriesshadow、transparency、gradients
八、Slide 6:标记点(仅 radarstyle=marker)
radarstyle=marker下可以通过marker属性以符号:尺寸:颜色三元组为数据点配标记,本页四种符号各占一图:
officecli add charts-radar.pptx /slide[6] --type chart \ --prop chartType=radar --prop radarstyle=marker \ --prop title="circle:10:FF0000" --prop marker="circle:10:FF0000" \ --prop legend=none --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" officecli add charts-radar.pptx /slide[6] --type chart \ --prop chartType=radar --prop radarstyle=marker \ --prop title="square:8:0070C0" --prop marker="square:8:0070C0" \ --prop legend=none --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" officecli add charts-radar.pptx /slide[6] --type chart \ --prop chartType=radar --prop radarstyle=marker \ --prop title="diamond:12" --prop marker="diamond:12" \ --prop legend=none --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" officecli add charts-radar.pptx /slide[6] --type chart \ --prop chartType=radar --prop radarstyle=marker \ --prop title="triangle:10:70AD47" --prop marker="triangle:10:70AD47" \ --prop legend=none --prop categories="$CATS" --prop data="A:8,7,9,6,8,7"根据 chart.json 的marker定义,可用符号包括none, auto, circle, square, diamond, triangle, x, plus, star, dash, dot;marker支持symbol、symbol:size、symbol:size:color三种粒度,尺寸单位为磅(markersize的合法区间为 2–72)。注意diamond:12省略了颜色段——这与 schema 中"任意段可选"的规则一致,省略部分使用默认值。marker只对 line/scatter/radar 序列生效,其他类型会被静默跳过。
Features:marker(symbol:size:color 复合格式),符号:circle/square/diamond/triangle
九、Slide 7:背景
第七页围绕图表区与绘图区的填充、边框、圆角做文章:
officecli add charts-radar.pptx /slide[7] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop title="chartareafill + plotFill + borders" --prop legend=bottom \ --prop chartareafill=FFF8E7 --prop plotFill=FAFAFA \ --prop chartborder="000000:1" --prop plotborder="CCCCCC:0.5" \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" officecli add charts-radar.pptx /slide[7] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop title="roundedcorners=true" --prop legend=bottom \ --prop roundedcorners=true --prop chartborder="4472C4:2" \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" officecli add charts-radar.pptx /slide[7] --type chart \ --prop chartType=radar --prop radarstyle=standard \ --prop title="plotFill=none" --prop plotFill=none --prop legend=none \ --prop categories="$CATS" --prop data="A:8,7,9,6,8,7" officecli add charts-radar.pptx /slide[7] --type chart \ --prop chartType=radar --prop radarstyle=filled \ --prop title="chartareafill=none" --prop chartareafill=none --prop legend=bottom \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6"参数语义:
chartareafill=FFF8E7:图表区域(chart area,含标题图例的整块)背景色;chartareafill=none即透明;plotFill=FAFAFA:绘图区(plot area,坐标网格所在区域)背景色;plotFill=none透明;chartborder="000000:1"/plotborder="CCCCCC:0.5":图表区/绘图区边框,格式颜色:线宽;roundedcorners=true:图表边框圆角,常与chartborder配合做出卡片式外观(本页第二张图即用4472C4:2的蓝框 + 圆角)。
Features:chartareafill、plotFill、chartborder、plotborder、roundedcorners
十、Slide 8:样式预设与逐序列 Set
最后一页先用循环批量套用三种preset,再通过officecli set对已存在的某个序列做定点修改:
for p in minimal dark corporate; do officecli add charts-radar.pptx /slide[8] --type chart \ --prop chartType=radar --prop radarstyle=filled --prop preset=$p \ --prop title="preset=$p" --prop legend=bottom \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" done officecli add charts-radar.pptx /slide[8] --type chart \ --prop chartType=radar --prop radarstyle=marker \ --prop title="chart-series Set" --prop legend=bottom \ --prop categories="$CATS" \ --prop data="Model A:8,7,9,6,8,7;Model B:6,9,7,8,9,6" officecli set charts-radar.pptx "/slide[8]/chart[4]/series[1]" \ --prop name="Renamed A" --prop color=C00000 \ --prop marker=circle --prop markerSize=9preset 的底层实现:ChartPresets.cs
preset并不是魔法,而是一批经过设计的属性组合。在 ChartPresets.cs 中,GetPreset()支持 7 个命名预设:minimal、dark、corporate、magazine、dashboard、colorful、monochrome(别名mono),未命中返回null。文档示例中的三个预设定义分别是:
- minimal(L35-L52):浅色干净、强调数据本身——细灰网格线
E0E0E0:0.3、无边框、plotFill=none、无圆角,配色走 Office 蓝橙灰标准系; - dark(L57-L74):深色背景适合暗色幻灯片——图表区
1E1E1E、绘图区2D2D2D、白色标题、亮色数据; - corporate(L79-L98):商务蓝灰调——
2E75B6/44546A系配色、右置图例、加粗标题、外置主刻度。
可见preset本质上是一次性注入一批既有 schema 属性的快捷方式,之后仍可单独覆盖。
逐序列 Set
最后的set命令通过路径/slide[8]/chart[4]/series[1]精确定位到第八页第 4 张图(chart-series Set那张)的第 1 个序列,然后:
name="Renamed A":改写序列名(图例与标签同步更新);color=C00000:重设该序列填充色为深红;marker=circle+markerSize=9:单独为该序列指定圆形标记与 9 磅尺寸。
从 chart-series.json 的 schema 可见,markerSize合法区间为 2–72、仅当 marker 非none时生效;name同时支撑series{N}.name点语法。在 charts-radar.py 中,这一步通过doc.batch里按顺序追加的set条目完成,注释明确说明"set 必须在同一批中排在 chart[4] 创建之后"——批处理按条目顺序执行,这正是 OfficeCLI 批内依赖的处理方式。
Features:preset、chart-series Set:name、color、marker、markerSize
十一、完整功能覆盖表
| Feature | Slide |
|---|---|
| radarstyle:standard/marker/filled | 1 |
| title.font/size/color/bold | 2 |
| legendpositions、legendFont、legend.overlay | 2 |
| autotitledeleted | 2 |
| dataLabels:value/series/category/none | 3 |
| labelfont | 3 |
| axismin/max、majorunit、axisfont | 4 |
| gridlines/minorGridlines、labelrotation、axisnumfmt | 4 |
| colors、seriesoutline、gradient、seriesshadow | 5 |
| transparency、gradients | 5 |
| marker(symbol:size:color)——radarstyle=marker | 6 |
| chartareafill、plotFill、chartborder、plotborder、roundedcorners | 7 |
| preset | 8 |
| chart-series Set:name/color/marker/markerSize | 8 |
十二、检查生成的 PPTX
生成后用 OfficeCLI 的只读命令核验内容是否符合预期:
officecli query charts-radar.pptx chart officecli get charts-radar.pptx "/slide[1]/chart[1]" officecli get charts-radar.pptx "/slide[6]/chart[1]" officecli get charts-radar.pptx "/slide[8]/chart[4]/series[1]"query ... chart:列出文稿中所有图表节点;get "/slide[1]/chart[1]":读取第一页第一张雷达图的全部属性,可对照radarstyle=standard是否落盘;get "/slide[6]/chart[1]":验证 marker 复合三元组;get "/slide[8]/chart[4]/series[1]":验证逐序列 Set 的结果(名称、颜色、标记、尺寸)。
这套 get/query 与上面所有add命令共享同一套 schema(如 chart.json 定义了/slide[N]/chart[N]位置路径,并指出轴线类属性为 add-time only,创建后需走chart-axis元素),因此"写"与"读"是对称的。
十三、其他两条等价入口
除了逐条 CLI 命令,仓库还提供两种等效的批量构造方式:
- charts-radar.sh:bash 版。先
officecli create+officecli open建立会话,然后逐条add,最后officecli close+officecli validate校验文档。脚本头部注明故意不开启set -e,以容忍未来版本的 'UNSUPPORTED props' 警告(officecli 退出码 2)继续构建完整文档; - charts-radar.py:Python SDK 版。
officecli.create(FILE, "--force")启动常驻进程,每一页的标题形状加四张图作为一批doc.batch(...)发送,每项都是{"command","parent","type","props"}字典;所有批处理结束后doc.send({"command": "save"}),退出 context 时落盘。
两种方式产出的charts-radar.pptx完全等价,适合分别嵌入 shell 流水线与 Python 自动化任务。
结语
从 charts-radar.md 出发,本文完整覆盖了 OfficeCLI 雷达图从"一张空白幻灯片"到"32 张风格化图表"的全部过程:radarstyle三变体决定了雷达图的基本形态,title/legend/dataLabels/axis/series/background/preset七大类属性负责视觉细节,而officecli set的逐序列路径提供了创建后的定点微调能力。配合 ChartHelper.Setter.cs 的枚举映射、ChartPresets.cs 的预设字典与 chart.json 的 schema 文档,你可以把同样的参数组合迁移到任意chartType,让雷达图、柱状图、折线图在一条 CLI 流水线下保持一致的视觉语言。
- CLI
- AI 应用
- MCP 服务
【免费下载链接】OfficeCLI
OfficeCLI is the first and best Office suite purpose-built for AI agents to read, edit, and automate Word, Excel, and PowerPoint files. Free, open-source, single binary, no Office installation required.
相关推荐
OfficeCLI 高级图表属性实战:用 add / set / get 三命令掌控 PPT 图表的长尾配置
OfficeCLI 高级图表属性实战:用 add / set / get 三命令掌控 PPT 图表的长尾配置 本文以 OfficeCLI 仓库自带的 chart
CLIAI 应用MCP 服务OfficeCLI Morph-PPT 风格实战:用 `dark--architectural-plan` 打造建筑蓝图式演示文稿
OfficeCLI Morph PPT 风格实战:用 dark architectural plan 打造建筑蓝图式演示文稿 导读 :本文讲解 OfficeCL
人工智能AI 应用AI 技能CLIMCP 服务vue-chartjs 8大图表类型深度解析:从柱状图到雷达图
vue chartjs 8大图表类型深度解析:从柱状图到雷达图 想要在Vue.js项目中实现专业级的数据可视化吗?vue chartjs作为Chart.js的V
前端数据可视化UI组件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考