前期01:深度:從 Office 365 新圖示來看微軟背後的設計新理念
前期02:嘗試:Script Lab,快速 Office 365 開發工具
前期03:嘗試:Script Lab,知識儲備
前期04:實踐:Script Lab,啟動函式,Excel 基礎操作(1)
前期05:實踐:Script Lab,九九乘法表,Excel 基礎操作(2)
前期06:Script Lab ,Office JavaScript API助手,Excel 基礎操作(3)
前期07:Script Lab ,事件處理,Excel 基礎操作(4)
本期08:Script Lab,單詞“卡拉OK”,Word 基礎操作
本期09:Script Lab,,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 =
'
...
‘; return svg;
【程式碼解析】
取得當前頁,並插入 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.setSelectedDataAsync 也有一個選項物件,其中包含可選引數,但其選項物件的引數與該 API 中其他非同步函式的引數不同,因為此函式的用途是設定資料。 因此,Document.setSelectedDataAsync 的可選引數與設定資料有關:
-
coercionType: 一個指定所插入資料格式(文字、HTML、OOXML、表或矩陣)的 CoercionType 列舉
-
asyncContext: 一個使用者定義的物件,在作為回呼函式唯一引數傳遞給該函式的 AsyncResult 物件中無變化傳回。
AsyncResult 物件在非同步函式中的角色 JavaScript API for Office 中非同步函式的通用簽名中的第三個引數是可選的回呼引數。 當執行時呼叫回呼函式時,它會將 AsyncResult 物件作為回呼函式唯一的引數傳入。 AsyncResult 物件包含有關非同步操作的資訊,如: 操作是否成功;發生了什麼錯誤(如果有);以及非同步函式的傳回值(如果有)。在傳回某種資料或物件的所有非同步函式中,AsyncResult 都是可以獲得傳回值的唯一方式。 可以使用 AsyncResult.value 屬性實現這一點。
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.error(asyncResult.error.message);
【效果圖】