2017-05-10 8 views
2

私はExcel Addinに取り組んでいます。 TaskPaneとDialogには多くのデータが取り込まれています。これにより、Dialogの起動が遅くなります。これは、別のブラウザセッションであり、TaskPaneに既にロードされているデータを活用できないためです。私はTaskPaneとDialogの間でセッションデータを共有するための最良の方法は何か疑問です。私は、ドキュメントの設定ストアを使用することができます。しかし、それらはランタイムデータです。私は実際にそれらをドキュメントに残したくありません。私はLocalStorageを使用しようとしました。それはExcelオンラインとMacで動作しましたが、Windowsでは動作しませんでした。私は彼らがWindows Excelで開くダイアログは全く新しいブラウザセッションだと思う。だから今私はアイデアがありません。タスクペインとダイアログ間でデータを共有する最も良い方法は何ですか?

また、ダイアログの読み込み速度を上げる方法についての提案がある場合は、教えてください。

+0

「ダイアログ」と言うと、Dialog APIについては正しいですか?あなたは、タスクペインとダイアログに何を入れているのか、より具体的なコード例を教えてください。 –

+1

タスクペインのダイアログ間でデータを共有するには、ローカルストレージが最適です。 Michael Zの質問に加えて、それがWindows上で動作しないと言うとき、あなたはどういう意味ですか?症状は何ですか?ところで、ダイアログは確かに新しいブラウザセッション(Excelだけでなく、すべてのホストで)です。しかし、ローカルストレージはセッション間でアクセスできるため、ローカルストレージとは無関係です。 –

+0

@ MichaelZlatkovsky-Microsoft、はい、Dialog APIについてです。 –

答えて

0

わからないこれはあなたのニーズに合うが、おそらくJSONデータとして渡すかどう:

  1. ダイアログフォームの使用この機能の上で次にタスクペイン

    var jsonData = encodeURIComponent(JSON.stringify(dataToPassToDialog)); 
    
    Office.context.ui.displayDialogAsync('https://path/to/dialog.html?' + jsonData, 
        // change these to your preference 
        { height: 70, width: 20, cache: false }, 
    
        function (asyncResult) { 
    
         // note _dlg is globally defined 
         _dlg = asyncResult.value; 
    
         _dlg.addEventHandler(Office.EventType.DialogMessageReceived, 
         processDialogCallback); 
        } 
    ); 
    
  2. からダイアログを呼び出しますタスクパネルからJSONデータを取得する

    function getJSONFromUrl() { 
        var jsonGet = decodeURIComponent(window.location.search.substring(1)); 
        var jsonGet = jsonGet.substring(0, jsonGet.lastIndexOf("]") + 1); 
        return JSON.parse(jsonGet); 
    } 
    
  3. 最後にデータをタスクペインに送り返す

    Office.context.ui.messageParent(dataFromDialog);

+0

WindowsとMacで正常に動作するようです –

関連する問題