繁體中文
English 简体中文 繁體中文
Methodox 首頁

智慧物件

智慧物件是 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 源可以呼叫文件函式指令碼中的函式。

  • 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 會在插入任何內容之前顯示智慧物件將呈現的內容。在你按下它之前,它不會執行任何東西。開啟預覽後,每次更改稍過片刻,對話方塊就會像重新整理時一樣計算源,並顯示值、表格的前幾行或圖片,或者說明為何沒有結果。這樣,輸錯的公式或意外的表格形狀會在這裡被發現,而不是在文件中。

智慧報告中的 Insert Smart Object,源為 =[Budget.xlsx]Summary!A1:D6,預覽顯示它將填充的五行四列 預覽會讀取文件的其他智慧物件、參數和授權,不寫入任何內容;只有在文件的程式碼已啟用時,才會執行 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 會為每一項列出其投影片編號。重新整理失敗時,該索引標籤會自動開啟。

啟用後執行 Refresh All 的智慧報告示例:來自 Budget.xlsx 的數字出現在文字和表格中,Smart Objects 索引標籤在 Smart objects 下列出 Lua 利潤率,在 Data sources 下列出從活頁簿讀取的五個值,均已重新整理

  • 按兩下某一行可轉到該智慧物件:文件滾動到它所在位置並選中它;在 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 圖。

另請參閱