☰
OfficeCLI 雷达图实战:用 officecli add 从零构建 8 页 PPT 雷达图展示
2026/9/30 6:44:10 网站建设 项目流程
  • 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.

项目地址:https://gitcode.com/GitHub_Trending/of/OfficeCLI
点击查看免费下载

本篇技术指南以仓库中的 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):

位置xywidthheight
左上0.31.056.13
右上6.951.056.13
左下0.34.256.13
右下6.954.256.13

从 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=3in

Features:chartType=radar、radarstyle(standard/marker/filled)

源码实现:radarstyle 是如何写进 OOXML 的

在 ChartHelper.Setter.cs 的case "radarstyle"分支中可以看到完整映射逻辑:

  • 输入值先做大小写归一,再通过 switch 映射到 OOXML 枚举:
    • filled/fill→C.RadarStyleValues.Filled
    • marker→C.RadarStyleValues.Marker
    • standard/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=9

preset 的底层实现: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

十一、完整功能覆盖表

FeatureSlide
radarstyle:standard/marker/filled1
title.font/size/color/bold2
legendpositions、legendFont、legend.overlay2
autotitledeleted2
dataLabels:value/series/category/none3
labelfont3
axismin/max、majorunit、axisfont4
gridlines/minorGridlines、labelrotation、axisnumfmt4
colors、seriesoutline、gradient、seriesshadow5
transparency、gradients5
marker(symbol:size:color)——radarstyle=marker6
chartareafill、plotFill、chartborder、plotborder、roundedcorners7
preset8
chart-series Set:name/color/marker/markerSize8

十二、检查生成的 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.

项目地址:https://gitcode.com/GitHub_Trending/of/OfficeCLI
点击查看免费下载
上一篇:如何用Excel手写实现AI注意力机制:Self-Attention与Multihead完整指南
下一篇:Hindsight Benchmarks 完整指南:用 LoComo、LongMemEval 与性能测试套件评估 Agent 记忆系统

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询