wps win x64体验版wps宏编辑器新增跨组件数据互通能力

邹应锋
邹应锋

@金山办公

我们一直在密切关注js宏编辑器的二次开发者的诉求,之前对呼声很高的网络接口作了支持,采用了前端通用的fetch规范接口来设计,本次win x64体验版,在社区中大家对wps宏编辑器中的跨组件数据互通能力的呼声很高,这的确也是一项重要的能力,我们带出了这项能力。此外,本次还修复了wps宏编辑器在高分辨率显示器下的显示问题,修复了很多宏编辑器中窗体控件的问题,欢迎大家尝鲜和反馈。

跨组件数据互通,它类似于在vba编辑器中的CreateObject()的能力,一些典型的使用场景是围绕组件间的数据流转,比如把wps电子表格中的统计数据自动插入到wps文字文档或演示幻灯片中、把wps文字中的表格类数据自动导入到wps电子表格中等。下面我举例子给出一下使用说明:

执行以上宏代码,会启动wps表格并填入数据,效果如下:

以上代码通过打开wps文字的js宏编辑器,执行宏编辑器中的代码,则把简历中的求职人的关键信息提取了出来,并输出到wps表格中。

这次的wps宏编辑器中新增的CreateObject支持三大组件中的相互数据通信,对应的key值分别为ket.application/kwps.application/kwpp.application. 这个能力是跨平台通用的。

实际上,从开放性着想,CreateObject在设计上保持了与第三方进程通信的能力,开发者可以将任何第三方程序与wps组件进行通信,key值由开发者自行定义,并扩展自己任意的接口来在wps宏编辑器中使用。关于这一块的能力请大家继续关注。

广东省
浏览 2644
4
37
分享
37 +1
56
4 +1
全部评论 56
 
chendeqian
要单独安装宏的吗?哪里可以下载的
· 广西
回复
 
Eric Hu
在WPS表格中使用JSA创建WPS演示对象kwpp后,对Slide中矩形进行删除时程序崩溃。命令是Shapes.Item(1).Delete()
· 广东省
回复
Eric Hu
或者这样:Shapes.Item(‘shapename’).Delete()
· 广东省
回复
 
耀愿
请问有没有Linux版啊?
· 广东省
回复
 
耀愿
这样挺好,可以实现数据互通了
· 广东省
回复
似水无痕
还没那么美好
· 湖南省
回复
 
似水无痕
WPS表格中的代码: function et_test(){ const obj={et:"WPS表格",wpp:"WPS演示"}; const wpp=CreateObject("kwpp.application"); wpp.Presentations.Open(`${ThisWorkbook.Path}\\WPS演示.pptm`); //wpp.Run("WPS演示.pptm!wpp_test",[JSON.stringify(obj)]); //wpp.Run("WPS演示.pptm!wpp_test",JSON.stringify(obj)); wpp.Run("WPS演示.pptm!wpp_test",obj); } WPS演示中的代码: function wpp_test(obj){ obj=JSON.parse(obj); alert(obj["wpp"]) } 运行到这句,wpp.Run("WPS演示.pptm!wpp_test",obj),尝试了多种方案,总是提示第二参数的类型错误。
· 湖南省
回复
覃欢
覃欢

@金山办公

这个写法哈克不支持
· 湖北省
回复
 
似水无痕
在WPS演示的宏编辑器中继续编写如下代码测试: function test3(){ Application.Run("test4","123"); } function test4(x){ console.log(x); } 测试结果:报错,Application.Run传递的参数是否只能是数组?因为只有参数为数组时,才不会报错。
· 湖南省
回复
WPS催化剂-李伟坚
字符串也报错?我理解Application.Run里的参数,应该只能是普通类型的参数如字符串、数字等,不能是对象参数。
· 广东省
回复
 
似水无痕
在WPS演示的宏编辑器中编写如下代码测试: function test1(){ Application.Run("test2",[1,2,3]); } function test2(arr){ console.log(arr[0]); console.log(arr[1]); console.log(arr[2]); } 测试结果:无法输出任何结果,Application.Run的参数传递是否存在问题?
· 湖南省
回复
 
似水无痕
这次只测试个人版吗?什么时候能测试64位专业版呢?
· 湖南省
回复
 
Eric Hu
请问哪里可以下载此内测版本?
· 广东省
回复
覃欢
覃欢

@金山办公

https://bbs.wps.cn/topic/34012
· 广东省
回复
 
哈哈
津津有味的学习
· 贵州省
回复
 
fbfbzz
学习了
· 江苏省
回复
 
uibpqds
打卡
· 河南省
回复
 
@me
打卡
· 北京
回复
 
千锤百炼
如何实现用js实现:excelAPP('value1', 'value2')="new value",这个是需要给对象直接赋值,不是返回一个值。
· 浙江省
回复
似水无痕
对象的写法不对吧,也没有这样的赋值方式
· 湖南省
回复
 
千锤百炼
obj=openexcel(1.xxls) obj.range(1,2)="姓名" js如何实现赋值?
· 浙江省
回复
邹应锋
邹应锋

@金山办公

试下obj.ActiveSheet.Cells.Item(1, 2).Value2="姓名"
· 广东省
回复
 
『峰格』
打卡
· 山东省
回复
 
LG
111
· 河南省
回复
 
yi
yi

创作者俱乐部成员

· 江西省
回复
 
似水无痕
目标PPT文件为“WPS演示.pptm”,已处于打开状态,想通过表格显示“WPS演示.pptm”的名字。 function 表格操作PPT2(){ let wpp=CreateObject("kwpp.application"); alert(wpp.ActivePresentation.Name); } 测试结果,自动打开了一个空白PPT文档,只显示了这个空白PPT文档的名称,而之前已经打开的“WPS演示.pptm”并未显示,测试未达到要求。 CreateObject自动打开一个PPT空白文档,这个不是所需要求,而且VBA中的GetObject函数也没有。
· 湖南省
1
回复
邹应锋
邹应锋

@金山办公

你说的这个是与vba对应的GetObject()函数,这个需求先记下来。目前你可以先在CreateObject的新进程来打开这个文件来满足需求。 let wppApp = CreateObject("kwpp.application"); let pre = wppApp.Presentations.Open(xxx.pptm); pre.xxx
· 广东省
回复
 
似水无痕
wps表格操作PPT,打开指定PPT文件,结果却不是想要的。 function 表格操作PPT(){ let wpp=CreateObject("kwpp.application"); wpp.Presentations.Open("C:\\Users\\Administrator\\Desktop\\通信\\WPS演示.pptm"); } let wpp=CreateObject("kwpp.application"),这一句会自动打开一个空白PPT文档。 wpp.Presentations.Open("C:\\Users\\Administrator\\Desktop\\通信\\WPS演示.pptm"),这一句会打开指定的PPT文档。 最终测试结果是,多打开了一个空白PPT文档。
· 湖南省
1
回复
邹应锋
邹应锋

@金山办公

这个下个版本改进一下,至于多新建的一个文件,你不关心它就好了,并不影响使用。实际上在专业版上可能就没这个问题,这是因为个人版在启动时需要自己新建一个文件来显示件主窗口造成的。 function 表格操作PPT(){ let wpp=CreateObject("kwpp.application"); wpp.Presentations.Open("C:\\Users\\Administrator\\Desktop\\通信\\WPS演示.pptm"); } let wpp=CreateObject("kwpp.application"); let pre = wpp.Presentations.Open("C:\\Users\\Administrator\\Desktop\\通信\\WPS演示.pptm"); pre.xxxx
· 广东省
回复