WPS 演示 JSAPI:`Series.Values` 数组赋值不生效,执行不报错但数据保持原值
问题描述
在 WPS 演示中,通过 JSAPI 修改图表系列数据时,调用:
chart.SeriesCollection(1).Values = [4.3, 2.5, 5, 4.5];代码执行过程不会抛出异常,但随后再次读取 SeriesCollection(1).Values,数据仍然保持修改前的值,图表显示也没有变化。
官方文档中 Series.Values 标注为可读写,因此想确认当前 WPS 演示中该属性的写入能力是否正常支持。
WPS 官方开放平台的 WPP JSAPI 文档中,Series.Values 被明确描述为:
官方文档同时提供了直接通过数组为系列数据赋值的示例:
shape.Chart.SeriesCollection(3).Values = [1, 2, 3, 4]官方文档地址:
因此本次复现使用的:
chart.SeriesCollection(1).Values = [4.3, 2.5, 5, 4.5];与官方文档提供的使用方式一致。
但实际测试中,该赋值语句不会抛出异常,随后读取 Series.Values 时仍然返回原始值,图表数据也没有变化。
实际现象
例如图表第一个系列原始数据为:
[4.3, 2.5, 3.5, 4.5]执行:
chart.SeriesCollection(1).Values = [4.3, 2.5, 5, 4.5];赋值语句:
不抛异常
立即读取仍然是原值
等待 1 秒后读取仍然是原值
调用 chart.Refresh() 后仍然没有变化
重新获取 SeriesCollection(1) 后再次读取,仍然是原值
即:
写入前:
[4.3, 2.5, 3.5, 4.5]
尝试写入:
[4.3, 2.5, 5, 4.5]
写入后:
[4.3, 2.5, 3.5, 4.5]
异常:
无预期行为
执行:
chart.SeriesCollection(1).Values = [4.3, 2.5, 5, 4.5];后,应能够再次读取到:
[4.3, 2.5, 5, 4.5]同时图表中的对应数据点应更新。
已验证情况
目前已经在不同环境中复现过类似现象:
Windows WPS 演示
macOS WPS 演示
不同 WPS Build
柱形图
折线图
因此目前看不像是单一系统或单一图表类型的问题。
同时测试过图表对象上的其他普通属性,例如:
SeriesCollection(1).MarkerSize以及图表 Shape 的位置属性,可以正常修改并读回。
因此现象目前主要集中在图表系列数据写入路径。
最小复现步骤
打开 WPS 演示。
新建一个空白演示文稿。
插入一个普通柱形图。
获取图表对象。
读取第一个系列的 Values。
将其中一个数值修改后重新赋值。
再次读取 Values。
核心代码类似:
const chart = Application.ActiveWindow.Selection.ShapeRange.Item(1).Chart;
const series = chart.SeriesCollection(1);
const before = JSON.parse(JSON.stringify(series.Values));
series.Values = [4.3, 2.5, 5, 4.5];
const after = JSON.parse(JSON.stringify(series.Values));
console.log({
before,
after
});实际结果为:
{
before: [4.3, 2.5, 3.5, 4.5],
after: [4.3, 2.5, 3.5, 4.5]
}赋值过程没有抛出异常。
最小复现附件
我同时准备了一个独立的最小 WPS JS 加载项复现包。
该插件不依赖第三方服务,也不依赖业务项目。
使用方式:
启动插件
在 WPS 演示中新建空白文档
插入一个普通图表并选中
点击「图表测试 → 运行写入测试」
插件会直接显示:
写入前数据
尝试写入的数据
立即读回的数据
1 秒后读回的数据
是否发生异常
最终判断写入是否生效
附件中包含完整源码,方便直接检查。
希望确认
希望 WPS 技术团队帮助确认以下几点:
当前 WPS 演示 JSAPI 是否支持直接通过:
Series.Values = [...]修改图表系列数据?
如果支持,目前这种“setter 不报错但数据没有变化”的情况是否属于已知问题?
如果 Series.Values 当前无法可靠写入,官方推荐的图表数据修改方式是什么?
例如是否必须通过:
ChartData
Workbook
Worksheet / Range修改内嵌数据源,而不能直接修改 Series.Values?
如果这是当前 JSAPI 的实现缺陷,希望能够记录并修复。
谢谢。
@金山办公