Script Lab 09:异步调用函数,PowerPoint基础操作

简介: Script Lab 09:异步调用函数,PowerPoint基础操作

准备工作

Script Lab 的级初入门教程,到今天就要告一段落了。总结部分,我们来实践一个 PPT 的例子吧。相比 Word 和 Excel 来说,PPT 的 API 的完成度并不高,甚至连启动函数也没有实现(目前有 Excel.run、 Word.run、OneNote.run)。

在 PowerPoint 空间下,仅实现了一个方法,没有像 Excel 或 Word 那样,可以操作的较完整的 API 对象集。

var ppt = PowerPoint.createPresentation;


PPT 目前的主要操作,只能集中在一些 Offie 通用的功能上,依托于 Office 空间下的 context 对象来操作。本次举一个较简单的例子,在 PPT 上插入一个 SVG 的形状,这也是 Script Lab 中自带的一个例子(总共也只有 5个 API 案例)。

代码解析

【完整代码】

$("#insert").click(newImage);
function newImage 
{ 
 Office.context.document.setSelectedDataAsync( getImageAsBase64String, { coercionType: Office.CoercionType.XmlSvg, imageLeft: 50, imageTop: 50, imageWidth: 400 }, function(asyncResult) 
 { 
 if (asyncResult.status === Office.AsyncResultStatus.Failed) 
 { 
 console.error(asyncResult.error.message); 
 } 
 } );
}
function getImageAsBase64String 
{ 
 // A production add-in code could get an image from an 
 // online source and pass it to a library function that 
 // converts to base 64. 
 var svg ='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 100 100"> <title>SVG Logo</title> <a xlink:href="http://www.w3.org/Graphics/SVG/" target="_parent" xlink:title="W3C SVG Working Group home page">...</g> </g> </a></svg>'; 
 return svg;
}

image.png

【代码解析】

取得当前页,并插入 SVG 图标(发未选中,则引出发错):

Office.context.document.setSelectedDataAsync(...)

其实这种调用模式,我们在前期的代码中并未出现过,所以借此机会,讨论下这里的要点。Office API 应用程序中异步函数有通用签名格式,Office API 应用程序中的所有异步函数都有相同的命名约定和相同的基本签名。 每个异步函数的名称都以"Async"结尾,以本次调用的函数为例:其实所有的步函数的签名都遵循以下基本模式:

functionNameAsync(requiredParameters,[, options], [callback]);


必需参数后面另有两个参数:一个包含可选参数的对象和一个回调函数,两者始终都是可选的。异步函数中的可选参数 异步函数签名中的可选 JavaScript 对象是用分号分隔的键/值对的集合,其中的键是参数名称,值是您想对该参数使用的数据。键/值对的顺序无关紧要,只要参数名称正确即可。

以本次调用为例,setSelectedDataAsync 方法具有 Office 应用程序中所有异步函数通用的相同基本签名:

Office.context.document.setSelectedDataAsync( data [, options], callback);


Document.set­SelectedDataAsync 也有一个选项对象,其中包含可选参数,但其选项对象的参数与该 API 中其他异步函数的参数不同,因为此函数的用途是设置数据。 因此,
Document.setSelectedDataAsync 的可选参数与设置数据有关:

  • coercionType:一个指定所插入数据格式(文本、HTML、OOXML、表或矩阵)的 CoercionType 枚举
  • asyncContext:一个用户定义的对象,在作为回调函数唯一参数传递给该函数的 AsyncResult 对象中无变化返回。

AsyncResult 对象在异步函数中的角色 JavaScript API for Office 中异步函数的通用签名中的第三个参数是可选的回调参数。 当运行时调用回调函数时,它会将 Async­Result 对象作为回调函数唯一的参数传入。AsyncResult 对象包含有关异步操作的信息,如:操作是否成功;发生了什么错误(如果有);以及异步函数的返回值(如果有)。在返回某种数据或对象的所有异步函数中,AsyncResult 都是可以获得返回值的唯一方式。可以使用 AsyncResult.value 属性实现这一点。

if (asyncResult.status === Office.AsyncResultStatus.Failed)

{

console.error(asyncResult.error.message);

}


【效果图】

image.png

后 记

从3月12日起,写了第一篇垫场文章:深度:从 Office 365 新图标来看微软背后的设计新理念。13日开始正式连载 Script Lab 开发系列:尝试:Script Lab,快速 Office 365 开发工具。截止21日(今天)一共写了九篇文章,算是对 Script Lab 的一个初步介绍,也算是下个 Office 365 开发系列的一个垫场。

写作期间得到了不少朋友的帮助。首先是陈希章老师,关于 Office 365 开发的文章,基本上也只有陈老师一家了,他的那本书《Office 365开发入门指南》是国内目前唯一的一本 Office 365 开发相关的,后来又录制了《Office 365 开发入门指南教程》,加上陈老师的博客,都是最有价值的参考资料之一。贾成敏(JasonJia)老师是 Office 365 培训专家,先后分多次给予了 150 元的打赏(还有邹溪源、祝雷两位兄弟),也使我偿到了创作的乐趣,你们的鼓励是我后继续创作动力。最后一并感谢下,共同参加 Office 365 专委会,一直积极参与学习的小伙伴们(截止发文,目前共有 311 名小伙伴了,除前期有 20 名左右的的邀请,其它均来公众号文章末尾的宣传)。

image.png

作为一个 VSTO 开发老兵,曾经花了五年时间在国内推广 VSTO 技术,也曾为创造国中的PPT插件市场出了点绵薄之力。Office 365 的开发,包括本期的 Script Lab ,对我来说也是全新的挑战,之前有所耳闻,直到这次才正式下决心开始学习,把这几天来的所学所见以笔记的形式记录下来,所以内容错误和写作上的不合理在所难免,还希望大家见谅(明显的错误己有多处,也希望大家批评指正,并在文末指出来)。但是作为 Office 的下一代开发技术 OfficeJS 代表了 Office 开发的未来,随着 Office 365 市场份额的增加,Web Add-ins 的前途远胜于 VBA/VSTO,目前还是一片蓝海,除了陈希章老师作为微软 Office 365 推广的一张名片,目前入局者并不多,我希望是第二个,更希望有第三个,第一百个,成百上千的开发者和玩家一并参加进,共同打造这个氛围,众乐乐而不是独乐乐!快来加入以下QQ群,你就是其中的一份子,就算是 0 基础也不用怕,必能学成!最近欢迎大家在文末,能够提出一些建议与想法(包括勘误)。

相关文章
|
SQL 存储 缓存
MySQL - 一文了解MySQL的基础架构及各个组件的作用
MySQL - 一文了解MySQL的基础架构及各个组件的作用
1090 0
|
网络协议 安全 Linux
Linux的netns使用总结
Linux的netns(Network Namespace)是一项强大的网络隔离功能,可在内核层面创建多个独立的网络空间,每个空间配备独立的网络协议栈,包括接口、路由表及iptables规则等,确保不同应用或服务在网络环境中互不干扰,提升系统安全性和灵活性。通过`ip netns`命令可轻松管理netns,实现创建、删除及执行命令等功能。netns适用于容器技术、虚拟化环境及网络测试等多种场景,为用户提供高效、安全的网络环境管理方案。
827 3
|
easyexcel 数据库
为获取导入百分比,使用easyexcel获取导入excel表总行数
为获取导入百分比,使用easyexcel获取导入excel表总行数
592 0
|
机器学习/深度学习 供应链 安全
守护Windows系统安全:挑战、策略与未来展望
加强数据备份与恢复以及提升用户安全意识等。同时,展望未来,人工智能与机器学习、零信任架构、量化安全评估与风险管理以及强化供应链安全等新技术和新理念将为Windows系统安全提供更加坚实的保障。让我们共同努力,守护好Windows系统的安全防线,为数字化时代的繁荣发展贡献力量。
|
Java API
什么是Java函数式接口?
【4月更文挑战第13天】
205 0
什么是Java函数式接口?
|
人工智能 前端开发 Cloud Native
【专栏】洞察.NET 技术的开发趋势
【4月更文挑战第29天】本文探讨了.NET技术的三大发展趋势:1) 跨平台与云原生技术融合,通过.NET Core支持轻量级、高性能应用,适应云计算和微服务;2) 人工智能与机器学习的集成,如ML.NET框架,使开发者能用C#构建AI模型;3) 引入现代化前端开发技术,如Blazor,实现前后端一致性。随着.NET 8等新版本的发布,期待更多创新技术如量子计算、AR/VR的融合,.NET将持续推动软件开发的创新与进步。
235 0
|
人工智能 JavaScript 中间件
【利用AI让知识体系化】入门Egg框架(含实战)(一)
【利用AI让知识体系化】入门Egg框架(含实战)
|
存储 人工智能 安全
网络信息系统安全的发展演变
网络信息系统安全随着通信技术和信息技术的发展,大致经历了通信保密年代、计算机系统安全年代、信息系统网络安全年代、网络空间安全年代。
491 0
|
存储 安全 物联网
搞懂Nfc刷卡看这篇就够了
搞懂Nfc刷卡看这篇就够了
7845 1
|
SQL 安全 数据库