从 fsys.openXml 0.12.0 起,builder 支持 kind="chart",生成真实 ChartML 图表和独立的内嵌 XLSX。无需 Office/WPS、.NET 或临时工作簿文件;不是截图、普通形状柱条或只有显示缓存的图表。
import fsys.openXml.pptx.builder;
var values=[12,0,null,20,null];
values@={length=5}; // 明确保留尾部缺值
var slides=[{shapes=[{
kind="chart";name="Sales";
x=50;y=60;width=860;height=420;
chart={
type="column";
title="销售情况";
categories=["一月","二月","三月","四月","五月"];
series=[{name="销量";values=values;color="4472C4"}];
legend=false;dataLabels="value";
fontSize=14;numberFormat="0";
axisMin=0;axisMax=30;majorUnit=10;
};
}]}];
var report,err=fsys.openXml.pptx.builder.check(slides);
if(!report) return null,err;
if(!report.ok) return null,report.issues;
return fsys.openXml.pptx.builder.write("/native-chart.pptx",slides);
chart 内的未支持参数明确报错,不会把 stacked/secondaryAxis/formula 等当作已经生效。形状的位置/尺寸为 point;图表样式放在 chart 表内,形状本身不支持旋转/翻转/阴影/超链接/圆角。
| type | 范围 |
|---|---|
column |
二维簇状柱状图,可多个系列 |
bar |
二维簇状条形图,可多个系列;首类别置顶 |
line |
等距分类轴的普通折线,可多个系列;缺值断线 |
pie |
单系列二维饼图;非负且至少一个正值 |
categories:非空字符串数组,允许空字符串标签,但不接受 null 标签。最多1000项。series:1~32个 {name,values,color},name 为字符串,color 为 RRGGBB;默认配色轮换。values:与类别等长的数值/null数组;不隐式把字符串、false 或空串转成数值。有限数值范围为 ±1e100,总槽位不超过10000。table.len(values),遍历使用 table.eachIndex(values),不用 #values 或默认迭代器截断稀疏数组。尾部 null 或全空数组用 values@={length=N} 明确长度。= 开头也不会生成 Excel 公式;文字中的 _xHHHH_ 序列按字面保存。| 字段 | 默认/说明 |
|---|---|
title |
空字符串;非空时显示图表标题 |
legend |
"bottom";可 false/true/bottom/top/left/right,true等价bottom |
dataLabels |
false;true等价value;可value/percent,percent仅饼图 |
numberFormat |
"General";同时用于数值缓存、工作簿数值格与值轴/数值标签 |
fontSize |
14pt,1~200;标题为该字号+4pt,不继承页面正文字号 |
fontName |
options.fontName 或 Microsoft YaHei;可另设 fontNameLatin/Ea/Cs |
color |
文本色 334155;lang 继承options.lang,默认zh-CN |
background |
false透明;可显式RRGGBB |
axisMin/axisMax |
不设时应用自动选择;允许0,min必须小于max;非饼图 |
majorUnit |
正数,非饼图 |
gapWidth |
150,0~500;仅柱/条图 |
marker |
true;仅折线图,false不显示标记点 |
firstSliceAngle |
0,0~360;仅饼图 |
categoryColors |
与类别等长的颜色数组;仅饼图 |
每图一个独立 Data 工作表:A列分类,B列起为系列,第一行为系列名称。名称/类别/数值引用、缓存和工作簿均由同一份数据生成;图表关系指向包内工作簿,不连接外部数据。
使用 Office/WPS 的“编辑数据”修改。已有 editor.copySlide 可独立克隆这些图表和工作簿。本轮没有增加原生 setChartData 或任意已有图表的保真编辑 API;修改生成源数据后重生成,或使用应用的编辑数据功能。
本机 PowerPoint 16 已实际验证:四种类型、显示与字体、激活内嵌工作簿、修改数据、图表刷新、保存及重新打开。COM 自动化时先 Calculate/Refresh、处理消息后再关闭工作簿,不能仅以“工作簿保存成功”推断图表缓存已同步。用户于2026年10月8日确认五页图表示例在 Office/WPS 实测正常,编辑数据正常,第5页的0/null显示正确;未提供图表验收的WPS版本,不外推为所有版本或旧Office均已验证。
builder.check 校验图表数据与外部几何越界,不模拟图表内部轴标签、图例、百分比标签的排版,也不报告其相互遮挡。留出足够空间,必要时用真实应用渲染检查。pptx.read 仍不是图表语义读取器,不把图表缓存内容混入正文读取。zlib.zip.packStore(STORE、内存打包);外层 PPTX 仍压缩。需要随库配套新版 zlib.zip。完整五页演示:~/examples/File/OpenXML/pptx-charts.aardio,数据在 .pptx-charts/slides.aardio。第5页专门检验0、中间缺值和尾部缺值。示例数据均为虚构。