智慧物件
智慧物件是 Impulse 文件中或 Expo 投影片上的一段文字、一個表格或一張圖片,其內容來自別處:文件旁某個活頁簿中的儲存格、區域或名稱,一個 Lua、C# 或 Python 表示式,文件中的某個 Divooka 圖,或者一個 Data Source。典型用法是一份資料取自預算活頁簿的報告:修改活頁簿,重新整理報告,報告中的每個數字都會隨之更新。
智慧物件屬於 Functions:重新整理它們只會計算其值並寫入文件,不做其他任何事情。
建立智慧物件
Insert ▸ Smart Object 在兩個應用程式中開啟同一個對話方塊。
- 在 Impulse 中,將插入點放在值要出現的位置,或選中它要替換的文字,或將插入點放在表格中以填充該表格。
- 在 Expo 中,將插入點放在文字方塊中,以在其文字中插入一個值;或在投影片上建立表格或圖片:如果投影片有空的內容佔位符,智慧表格或圖片會放入其中。
對話方塊會詢問:
Name:其他智慧物件引用它時使用的名稱,例如
Revenue。Language 和 Source:
- Formula:針對文件旁某個活頁簿的公式,活頁簿名稱寫在方括號中:
=[Budget.xlsx]Summary!B4、=[Budget.xlsx]TotalRevenue(一個已定義名稱)、=SUM([Budget.xlsx]Summary!B2:B5),或者用於填充表格的區域,例如=[Budget.xlsx]Summary!A1:D6。 - Lua:以
smart.Name形式讀取其他智慧物件的表示式:(smart.Revenue - smart.Cost) / smart.Revenue。 - C#:以
Smart["Name"]形式讀取它們的表示式,並用Num()和Text()進行轉換:Math.Round(Num(Smart["Revenue"]) * 0.08, 2)。 - Python:
smart.Revenue * 0.2,或一個返回值的函式體;參見 Python。 - Divooka:文件中的某個 Function 圖,按名稱呼叫:
LOANPAYMENT(param.Principal, param.Rate, param.Years)。
Lua、C#、Python 和 Divooka 源還可以讀取文件的參數(
param.Name、Param["Name"]),更改某個參數時,恰好會重新整理讀取它的那些智慧物件。對於公式或圖呼叫,Source 框是單行輸入框;對於 Lua、C# 和 Python,則是多行文字區域。Lua 和 Python 源可以呼叫文件函式指令碼中的函式。- Formula:針對文件旁某個活頁簿的公式,活頁簿名稱寫在方括號中:
Object Type:文字、表格或 Image。Image 是由返回圖片的 Function 填充的圖片,例如由圖繪製的圖表或
host.getImage(url)。返回圖片的 Function 圖總是生成影像智慧物件。Format:值的數字格式,例如
#,##0或0.0%,使用 Formula 所用的格式程式碼。將滑鼠懸停在該框上,可以檢視每個符號的含義及示例。影像沒有格式,因此選擇 Image 時該框會消失。
如果文件的指令碼已禁用,選擇 Lua、C#、Python 或 Divooka 時會顯示 Scripts are disabled on this document,旁邊有一個 Enable 按鈕。
Preview 會在插入任何內容之前顯示智慧物件將呈現的內容。在你按下它之前,它不會執行任何東西。開啟預覽後,每次更改稍過片刻,對話方塊就會像重新整理時一樣計算源,並顯示值、表格的前幾行或圖片,或者說明為何沒有結果。這樣,輸錯的公式或意外的表格形狀會在這裡被發現,而不是在文件中。
預覽會讀取文件的其他智慧物件、參數和授權,不寫入任何內容;只有在文件的程式碼已啟用時,才會執行 Lua、C#、Python 和圖源,在此之前它會給出相應提示。
Insert ▸ Data Source… 則改為從 Data Source 建立智慧表格。
智慧物件會立即建立並重新整理,作為一個復原步驟。它在文件中以網底顯示,將滑鼠懸停在上面時,指標旁會顯示其名稱、源和上次重新整理時間。在 Expo 文字方塊中,智慧值隨周圍的文字一起移動,不能在其中鍵入內容。
重新整理
- Refresh All(
Ctrl+Shift+F9:在 Impulse 中為 References ▸ Refresh All,在 Expo 中為 Insert ▸ Refresh Smart Objects)按依賴關係所需的順序重新整理每個智慧物件:Margin在Revenue和Cost之後重新整理,智慧表格的圖表在該表格之後重新整理。 - Impulse 中的 References ▸ Refresh Selection 和 Expo 中的 Insert ▸ Refresh Selected Smart Object 會重新整理插入點處或所選的智慧物件,智慧物件右鍵選單中的 Refresh 也是如此。
重新整理時,每個活頁簿只讀取一次,且不執行其中攜帶的任何程式碼;先計算所有值,然後將它們作為一個復原步驟全部寫入:文字、表格和圖片一起寫入。一段文字會保留其格式;表格會隨行數增減,並按列名保留格式。失敗的智慧物件保留其上一次的值,狀態列會顯示重新整理成功和失敗的數量。
Smart Objects 索引標籤
Tools ▸ Smart Objects(在 Impulse 中也可用 References ▸ Smart Objects)會在底部托盤中開啟一個索引標籤,列出每個智慧物件及其種類、語言、源和上次重新整理時間,或者失敗原因,或者自上次重新整理後已被手動編輯。讀取其他檔案的智慧物件和 Data Source 列在 Data sources 下;文件的指令碼列在 Scripts 下。Expo 會為每一項列出其投影片編號。重新整理失敗時,該索引標籤會自動開啟。

- 按兩下某一行可轉到該智慧物件:文件滾動到它所在位置並選中它;在 Expo 中會轉到對應投影片並選中形狀,或開啟文字方塊並選中該值。
- Show Definition 會開啟 Scripts 索引標籤,定位到計算它的指令碼或圖中的節點。
- 在 Impulse 中,工具條上的按鈕可以重新整理全部或所選的智慧物件,Unbind 會將智慧物件變回普通文字。
在文件中右鍵按一下智慧物件,會提供相同的功能:Show in Smart Objects(Impulse)、Show Definition、Refresh;對於智慧表格還有 Column Number Format…;對於 Data Source 還有 Edit Data Source…。
設定智慧表格的格式
像設定任何表格一樣設定智慧表格的格式。重新整理會重寫表格,其列可能以另一種順序返回,或者多一列、少一列,因此格式歸屬於每個列的名稱,並在每次重新整理後重新應用:在 Impulse 中是每列的儲存格格式、文字格式和寬度;在 Expo 中是每列的標題儲存格和第一個正文儲存格的格式,應用到每一行。右鍵選單中的 Column Number Format… 設定某列數字的顯示方式。Data Source 或指令碼可能會為新列建議格式,而你設定的格式優先;參見按列名設定表格格式。
必須啟用指令碼
Lua、C#、Python 和圖智慧物件都是程式碼,因此在你通過 Scripts disabled 欄上的 Enable 按鈕啟用文件之前,它們不會重新整理;參見 Trust。讀取活頁簿的智慧物件以及 Data Source 屬於資料,無論是否啟用都會重新整理,前提是它們存取的內容已獲允許。
儲存方式
Impulse:每個智慧物件的值是 .docx 中的普通文字或普通表格,位於一個以其名稱命名的 Word 內容控制元件中。Word、LibreOffice 和 PDF 顯示最後一次的值;Word 儲存時會保留內容控制元件,因此文件可以在 Word 中往返編輯後仍能重新整理。
Expo:文字方塊中的值是文字中的一個欄位(a:fld),智慧表格或圖片是普通的 PowerPoint 表格或圖片,通過其形狀名稱重新找到。PowerPoint 和 LibreOffice 顯示最後一次的值。
在兩者中,繫結資訊都儲存在文件的專案部件中。
從指令碼中使用
在 Impulse 指令碼中,doc.smartObjects 可以列出智慧物件(count、[i]、find(name)),新增智慧物件(add(range, source, { language, name, format })、addTable(table, source, options)、insertTable(afterParagraph, source, options)),以及重新整理智慧物件(refresh()、refreshOnly(names))。每個智慧物件都有 name、kind、language、source、format、text、refreshed、error、isEdited 和 unbind()。
試一試
Examples\Automation\Smart report中有繫結到Budget.xlsx的Report.docx。開啟報告,啟用其指令碼,在活頁簿中修改一個數字並儲存,然後在報告中執行 References ▸ Refresh All。- Weather Report 整頁都是智慧物件,而 Loan Letter 中的數字來自 Divooka 圖。