2017-08-09 101 views
1

我使用office.js創建我的第一個Excel加載項。在這一刻,我試圖弄清楚如何在使用Add-in Commands時調用一些初始代碼。如何在Excel的加載項加載代碼時使用js

當我沒有加載項命令時,加載加載項時加載主頁,我可以做一些初始化,如定義命名項,綁定等。但是在附加命令的情況下,我無法找到任何方式來做到這一點。

確實是每個按鈕單擊加載指定的「functions.html」,調用Office.initialize,然後調用清單中指定的方法,然後再次卸載所有的東西?有沒有可用的持久性?

我們還需要讓用戶通過ADAL登錄,並且加載項只能在登錄成功時才能使用。

所以我的問題在短期:

當使用外接命令

  1. 我如何可以調用用戶之前的任何功能,點擊第一個按鈕 /菜單項左右?

  2. 如何讓一些js變量在加載項 會話中持久存在?

回答

1

這裏有幾個問題。讓我們打破他們:

外接生命週期

加載項不會被初始化/加載,直到用戶啓動/將它們添加到文檔中。在此之前,唯一出現的是清單文件中定義的命令。 請注意,取決於您的配置,事情可能會有點不同(下面的更多內容)。

無論您的加載項如何啓動(功能,顯示任務窗格等),生命週期都保持不變。 Office打開清單中指定的URL並連接加載項和主機應用程序之間的通信。一旦完成,它將執行您爲Office.initialize定義的功能。

雖然在這方面確實存在一些開銷,但這是非常不可避免的。我們需要在API跨越邊界進行操作之前,連接兩個沉重的沙盒應用程序之間的通信。您的頁面(或函數)需要等待它發生才能開始執行操作(即Office.initialize)。我們還需要確保加載的頁面具有響應性,這就是爲什麼我們使用5秒的超時時間調用Office.initialize。

即使設置開銷,該過程異常快速。一般來說,瓶頸是Web應用程序加載的資源遠遠超過必要的。這是使用單獨的functions.html的原因之一,它允許你拋出一切,但最低限度(參考office.jsfunctions.js)。

外接命令&自動加載

第一個是在使用外接命令影響如何打開文檔時加載項加載。如果沒有定義加載項命令,Excel將自動重新加載在保存文檔時以前打開的任何加載項。

如果您定義了加載項命令,則此自動加載過程不再發生。 Excel將加載您的加載項命令,但它不會自動啓動加載項本身。

這可以使用新的Office.AutoShowTaskpaneWithDocument功能進行控制。這裏有一個演練:Automatically open a task pane with a document。此功能在Office版本中尚未廣泛使用,因此它仍然處於預覽狀態。也就是說,你當然可以使用這個功能,直到你的用戶收到一個支持它的版本,它纔會被忽略。

預認證

認證需要在您的外接內完全處理。很遺憾,在加載加載項之前沒有辦法預先驗證用戶身份。就Office而言,如果他們已經加載了你的清單,那麼你就會將加載項命令添加到功能區。您需要在加載項中處理身份驗證,並在需要用戶提供憑證時使用displayDialogAsync啓動OAUTH工作流程。

+0

感謝馬克爲您提供了迅速而詳盡的答案,現在對我來說更加清晰! –

1

這裏是你的2個問題的官方documentation

要做到這一點,您可以:

  • JavaScript API的使用成員辦公室的數據作爲名稱/值對存儲在存儲依賴於外接式的位置的屬性包。
  • 使用底層瀏覽器控件提供的技術:瀏覽器Cookie或HTML5網絡存儲(localStorage或sessionStorage)。
+0

謝謝亞歷克斯,你幫了我很多,因爲直到知道我還沒有意識到存儲在文檔中的物業包的存在。這很棒!到現在爲止,我已經使用了非常複雜的方法來使用命名項來存儲「圖紙變量」。這使事情變得更容易。不幸的是,我不能將2個帖子標記爲答案,儘管你回答了我的問題的第二部分。 –

相關問題