Divooka 圖
Methodox Office 文件可以攜帶 Divooka 程式,即由節點和連線組成的圖,作為 Lua 和 C# 之外的第三種語言。文件的圖以 .dvj 文件的形式儲存在其內部,這是 Divooka Compute 所開啟的 .dvk 的文字形式;每個圖都扮演程式設計模型中的某一個角色:
| 圖 | 角色 | 用法 |
|---|---|---|
| 以大寫字母命名的 Function 圖 | Function | 在 Formula 中為 =DVK.LOANPAYMENT(B1, B2, B3);作為 Impulse 智慧物件時為 LOANPAYMENT(param.Principal, param.Rate, param.Years) |
| Routine | Command | 在 Tools ▸ Scripts 中執行;在命令列中為 --script Report.dvj#StampRegion |
| Events 圖 | 事件處理程式 | 在文件開啟、儲存、編輯、重新計算、重新整理或放映時執行 |
圖在 Divooka 的 No-Reflection Interpreter 上執行,它只准備一次圖,之後按需多次呼叫,因此由兩百個儲存格組成的一列呼叫同一個圖時,只准備一次。
圖編輯器
Tools ▸ Scripts(Alt+F11)會在文件的 Lua、C# 和 Python 指令碼旁邊列出其圖文件。選中一個 .dvj,圖就會在原本是文字編輯器的位置以畫布形式開啟,每個圖一個索引標籤:Function 圖顯示 fx 圖示,Routine 顯示播放圖示,Events 圖顯示鈴鐺圖示。編輯器的工具會加入窗格的工具條。

- 移動檢視。 用中鍵拖動,或按住
Alt或Space拖動,即可平移;滾輪以指標位置為中心縮放;F使圖適應檢視。較長的圖開啟時會以可讀的大小顯示其開頭。 - 新增節點。 右鍵按一下畫布空白處,或使用 + 按鈕,即可在該處開啟一個可搜尋的面板。它只列出文件的版本能夠執行的內容:值節點(Number、Text Line、Text、Boolean、Comment),Routine 圖和 Events 圖中的 Branch,Events 圖中該事件型別的事件,以及按名稱列出的每個 Document Parameter——放置後即為其讀取節點,並連線到圖的 This Document。過載通過其輸入加以區分。會更改文件的呼叫只在 Routine 圖和 Events 圖中提供,在 Function 中永遠不提供。從引腳拖出連線並在畫布空白處鬆開,會在該處開啟面板,所選節點會自動與之連線。
- 瞭解節點。 將滑鼠懸停在節點上,即可看到它呼叫的內容、它來自的工具箱和包(與 Divooka Compute 中的顯示相同),以及它的文件:它的作用、每個輸入的含義以及它返回什麼。這樣就能瞭解諸如 Loan Letter 中 Amortization Schedule 這樣的節點是什麼。
- 連線與編輯。 從一個引腳拖到另一個引腳即可連線;型別不匹配的連線會被拒絕,工具條會說明原因。按住 Alt 按一下連線、在連線上劃過,或右鍵按一下連線並選擇 Delete Wire,即可斷開連線。字面量在引腳上編輯。
- 節點選單。 右鍵按一下節點可使用 Cut(
Ctrl+X)、Copy(Ctrl+C)、Paste(Ctrl+V)、Duplicate(Ctrl+D)、Rename 和 Delete(Delete)。複製的節點會保留它們之間的連線,既可以貼上到目前圖,也可以貼上到另一個圖或另一個文件的圖中。圖的 Input 和 Output(或 Begin 和 Return)不能刪除。 - 圖的輸入和輸出。 在圖已存在後,可通過圖的 Input 或 Output 節點選單中的 Edit Inputs、其索引標籤選單中的 Inputs and Outputs 或工具條上的介面按鈕,更改 Function 的輸入和輸出或 Routine 的輸入,格式與新建圖時相同(
Principal, Rate, Years=30);名稱保持不變的埠上的連線會保留。索引標籤選單中還有 Rename Graph 和 Delete Graph。 - 新建圖。 圖層按鈕可新增一個 Function(及其輸入和輸出,例如
Principal, Rate, Years=30;其他型別的輸入寫作name:text)、一個 Routine,或基於所選事件型別的文件 Events 圖。 - 編輯會自動寫入文件。 在畫布上每次更改後片刻(絕不會在拖動過程中),圖就會被寫入文件,使用它的儲存格和智慧物件會立即重新計算:在 Graph Editor 示例中更改
Add的 Summand1,B2 就會隨之變化。每次更改都是視窗 Edit ▸ Undo 中的一個步驟,復原時會撤回該更改,畫布也會隨之恢復。 - 錯誤會定位到其節點。 當某個儲存格或事件處理程式的錯誤指明瞭某個節點時,文件上方的紅色欄會有一個按鈕,用於開啟該圖並選中該節點。在某個節點上失敗的 Routine 會在執行後選中該節點。版本不支援執行的節點會在畫布上標記出來,懸停時顯示原因。
外部連結按鈕 Open in Divooka Compute 會在已安裝 Divooka Compute(完整的 Divooka 編輯器)時在其中開啟圖;否則該按鈕處於禁用狀態,其工具提示會說明未安裝 Divooka Compute。版本說明了 Methodox Office 在何處尋找它。文件的副本會隨圖一起傳送,因此在 Compute 中,This Document 就是該副本,新增節點選單會在 Office ▸ Parameters 下列出其參數;Methodox Office 還會傳送它的 Office 節點,因此 Compute 無需安裝任何內容就能提供這些節點。在 Compute 中儲存後,圖會作為一次可復原的更改回到文件中;如果在此期間文件的副本已被更改,Methodox Office 會詢問保留哪一個。使用了 Standard 版不支援執行的節點的圖,會按 Compute 寫入的樣子保留,並顯示其無法執行的原因。參見文件會話。
Function 圖
名稱為大寫字母的 Function 圖是工作表函式:活頁簿 Loan.dvj 中的 LOANPAYMENT 以 =DVK.LOANPAYMENT(...) 的形式呼叫。返回表格的圖會將其溢位,例如 =DVK.AMORTIZE(B1, B2, B3) 會溢位貸款的還款計劃;返回圖片的圖會在其儲存格中按比例適應顯示圖片,與 Excel 的 IMAGE 相同,儲存格的值為 Image W×H。在 Impulse 和 Expo 中,同一個圖是智慧物件的源,按名稱呼叫,可使用數字、帶引號的文字、param.Name 和 smart.Name 作為實參;返回圖片(例如圖表)的圖會填充影像智慧物件。參見工作表函式和智慧物件。
使用了取得資料節點的 Function 圖是資料來源 Function,它只在文件重新整理時(在 Formula 中為 Data ▸ Refresh Data,Ctrl+Shift+F5;在 Impulse 和 Expo 中為 Refresh All,Ctrl+Shift+F9)或其讀取的參數發生變化時取得資料,在此期間則以上次取得的內容作答。
Routine
Routine 圖是一個 Command:當從 Tools ▸ Scripts 執行時(Run 旁邊的列表用於選擇執行圖文件中的哪個 Routine),或從命令列執行時,它會更改文件,作為一個可復原的步驟:
MethodoxFormula --script "Report.dvj#StampRegion" --open "Region Events.xlsx" --save-as Stamped.xlsx
圖文件後面的 #Name 指定要執行的 Routine。
事件處理程式
Events 圖實現某一種 Office 事件型別,當文件已啟用且事件發生時,其處理程式就會執行:
| 事件型別 | 事件 |
|---|---|
| 所有文件 | Opened、BeforeSave、Saved、ParameterChanged |
| 活頁簿 | WorkbookOpened、RangeChanged(每次編輯時每個工作表一個區域)、Calculated |
| 文字文件 | SmartObjectsRefreshed |
| 簡報 | SlideShowStarted、SlideShowAdvanced、SlideShowEnded |
每個處理程式在文件上作為一個事務執行。由處理程式自身更改引發的事件不會傳回給它,復原和重做不會引發事件,一秒鐘內超過 64 個事件會暫停處理程式,因此處理程式不會陷入迴圈。
Office 節點
在 Standard 版中,圖可以使用 Divooka 標準庫中的純例程(數字、文字、邏輯、日期、陣列、列表、集合、字典、轉換)以及以下 Office 節點:
| 分組 | 節點 |
|---|---|
| Document | This Document(圖自己的文件);Open Office Document(在 Divooka Compute 中為檔案;在 Office 中為圖自己的文件)和 Save Office Document |
| Parameters | Parameter、Number Parameter、Text Parameter、Boolean Parameter、Has Parameter、Parameter Names,每個都接受文件並指定其讀取的參數名;Set Parameter 僅用於 Command |
| Data | HTTP Get、HTTP Get Bytes、Read Text File(通過使用者的授權);按點分路徑讀取的 Json Number、Json Numbers、Json Text、Json Texts;Format Url |
| Tables | Columns、Sequence、Number Column、Row Count、Amortization Schedule |
| Images | Chart(由 Formula 的圖表引擎繪製為圖片的表格)、From Bytes |
| Document edits | 用於 Command,每個都接受文件:Set Cell、Get Cell、Set Formula、Write Table、Add Sheet、Add Paragraph、Add Slide、Slide Count、Document Name、Document Path、Run Command;以及 Log |
Divooka Compute 中也提供相同的節點,因此在那裡製作的圖就是 Methodox Office 執行的圖。早期版本中的圖(其 Parameter 節點會自行尋找文件)在讀取時會被轉換為這種形式;參見 Document Parameter。
Methodox Office + Divooka Compute 還允許圖使用其旁邊已安裝的 Divooka 包(參見版本)。使用了其版本不允許的節點的圖會在執行之前被拒絕,訊息中會指出該圖和該節點;執行過程中的失敗也同樣如此,訊息會顯示在儲存格的訊息或 Scripts 窗格的輸出中。
試一試
Examples\Automation 中包含:
- Loan Calculator.xlsx:
=DVK.LOANPAYMENT和溢位的=DVK.AMORTIZE還款計劃,貸款條款作為 Document Parameter(Tools ▸ Parameters)。在 Divooka Compute 中開啟其圖,可以看到那裡也提供相同的參數。 - Loan Letter.docx:在一封信函中作為智慧物件使用的相同圖;將滑鼠懸停在
Loan.dvj中的 Amortization Schedule 節點上,可以看到它的來源。 - Weather.xlsx:從 Open-Meteo 取得天氣預報的資料來源 Function。Weather Report 用一個圖繪製其 24 小時圖表,Market Dashboard 則通過一個 Events 圖重新繪製自身。
- Region Events.xlsx:一個記錄更改內容的 Events 圖,以及
StampRegionRoutine。 - Graph Editor.xlsx:可供編輯的
Pricing圖,B2 會隨每次更改而變化;一個使用了 Standard 版會拒絕的節點的圖;以及 B10 中一個以圖片作為結果的 Function,圖片繪製在其儲存格中。 Graphs\*.dvj:獨立的圖檔案,供 Divooka Compute 使用。
請先啟用每個文件;之後天氣示例會要求你 Allow 它們對 api.open-meteo.com 的請求。