因WPSJS项目中,一次仅对一个网页进行处理,用户交互过程中的数据仅在当前网页有效,如果想在其他网页上共享这些数据,需要使用一个中间数据存储的方式进行连接。而当前WPSJS官方里提供了一种中间数据存储方案,笔者实际开发过程中也用了自己探索的另一种方案,在此向大家分享。

使用WPS PluginStorage来存储数据

这个是官方提供的推荐方法,用于记录一些键值对简单数据,对应于浏览器原生的localStorage操作,具体可以查看官方demo的示范。

在笔者的ET催化剂插件里,也用到它来存储形状的位置、名称信息等,方便在其他时候来重新使用它。

此数据库存储的容易有限,最大不超过5M数据,所以一般只用于存储文本类用户窗体表单上交互的配置信息。

:::info 在浏览器上存储数据的方案,可能还可以使用IndexedDB的方案,有兴趣的朋友可以探索下,可以突破5M大小,并且永久性存储,相关介绍可参考:
http://www.ruanyifeng.com/blog/2018/07/indexeddb.html :::

使用CustomXMLPart对象存储复杂大容量数据

在VBA对象模型中,有一个非常好用的对象CustomXMLPart,它存储的效果是会在文档上建一个xml节点来存储,用户是无感的,不会在用户看到的工作表单元格区域或其他地方看到。

而且存储的大小没有限制,甚至将一些二进制数据通过序列化为xml文本进行存储,在笔者开发Excel催化剂的图表插入功能等场景里大量使用过。有兴趣可翻看相关文章。
image.png
而在ET催化剂中的轮播图制作中,笔者也使用CustomXMLPart对象用于存储图片信息。
从用户上传的网页上,收集到用户的图片,并将其处理为base64文本,然后在生成轮播图时,跳转到一个新的网页上生成,最后这些图片信息经过CustomXMLPart对象作为中间存储,完成了数据的传递过程。

除了作中间交换数据使用,其实还有一个很大的场景是用于集成外部文件到OFFICE文档中,例如将整个网页的文本都存储下来,在下次打开文件时,再释放出来,生成一个新文件供调用。

笔者在ET催化剂的插入本地html文件场景使用了,可以实现插入的本地网页脱离本地文件的影响,直接集成到文档中,下次使用,在不同电脑上仍然可用,缺点是文档文件大小会膨胀起来。

核心代码如下:
image.png